From 873e419cf73fa747a897cd8e06c8ffad6661efb0 Mon Sep 17 00:00:00 2001
From: murgatroid99 <mlumish@google.com>
Date: Fri, 6 May 2016 12:44:46 -0700
Subject: [PATCH] Added explanation about handling signals in C

---
 src/ruby/ext/grpc/rb_signal.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/ruby/ext/grpc/rb_signal.c b/src/ruby/ext/grpc/rb_signal.c
index dd60b0f251..a9e512374b 100644
--- a/src/ruby/ext/grpc/rb_signal.c
+++ b/src/ruby/ext/grpc/rb_signal.c
@@ -44,6 +44,10 @@ static void (*old_sigterm_handler)(int);
 
 static volatile bool signal_received = false;
 
+/* This has to be handled at the C level instead of Ruby, because Ruby signal
+ * handlers are constrained to run in the main interpreter thread. If that main
+ * thread is blocked on grpc_completion_queue_pluck, the signal handlers will
+ * never run */
 static void handle_signal(int signum) {
   signal_received = true;
   if (signum == SIGINT) {
-- 
GitLab