From ef4eeea5d02c47e78d3fdcbc126bfad4f825dad4 Mon Sep 17 00:00:00 2001
From: Alexander Polcyn <apolcyn@google.com>
Date: Wed, 12 Jun 2024 21:29:56 +0000
Subject: [PATCH] remove unnecessary guard on shutdown_and_notify

---
 src/ruby/end2end/killed_client_thread_client.rb |  2 ++
 src/ruby/ext/grpc/rb_call.c                     |  1 +
 src/ruby/ext/grpc/rb_server.c                   | 10 +++-------
 3 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/src/ruby/end2end/killed_client_thread_client.rb b/src/ruby/end2end/killed_client_thread_client.rb
index f0de0635c4c..1e3b54b02a2 100755
--- a/src/ruby/end2end/killed_client_thread_client.rb
+++ b/src/ruby/end2end/killed_client_thread_client.rb
@@ -19,6 +19,8 @@
 
 require_relative './end2end_common'
 
+ENV["GRPC_VERBOSITY"] = "DEBUG"
+
 def main
   parent_controller_port = ''
   server_port = ''
diff --git a/src/ruby/ext/grpc/rb_call.c b/src/ruby/ext/grpc/rb_call.c
index 26dc6ec4fca..297ea1fbdc4 100644
--- a/src/ruby/ext/grpc/rb_call.c
+++ b/src/ruby/ext/grpc/rb_call.c
@@ -809,6 +809,7 @@ struct call_run_batch_args {
 };
 
 static void cancel_call_unblock_func(void* arg) {
+  gpr_log(GPR_DEBUG, "GRPC_RUBY: cancel_call_unblock_func");
   grpc_call* call = (grpc_call*)arg;
   grpc_call_cancel(call, NULL);
 }
diff --git a/src/ruby/ext/grpc/rb_server.c b/src/ruby/ext/grpc/rb_server.c
index ef9d2f55e71..0ecf4a1eeef 100644
--- a/src/ruby/ext/grpc/rb_server.c
+++ b/src/ruby/ext/grpc/rb_server.c
@@ -49,16 +49,13 @@ typedef struct grpc_rb_server {
   /* The actual server */
   grpc_server* wrapped;
   grpc_completion_queue* queue;
-  int shutdown_and_notify_done;
   int destroy_done;
 } grpc_rb_server;
 
-static void grpc_rb_server_maybe_shutdown_and_notify(grpc_rb_server* server,
-                                                     gpr_timespec deadline) {
+static void grpc_rb_server_shutdown_and_notify(grpc_rb_server* server,
+                                               gpr_timespec deadline) {
   grpc_event ev;
   void* tag = &ev;
-  if (server->shutdown_and_notify_done) return;
-  server->shutdown_and_notify_done = 1;
   if (server->wrapped != NULL) {
     grpc_server_shutdown_and_notify(server->wrapped, server->queue, tag);
     // Following pluck calls will release the GIL and block but cannot
@@ -134,7 +131,6 @@ static VALUE grpc_rb_server_alloc(VALUE cls) {
   grpc_rb_server* wrapper = ALLOC(grpc_rb_server);
   wrapper->wrapped = NULL;
   wrapper->destroy_done = 0;
-  wrapper->shutdown_and_notify_done = 0;
   return TypedData_Wrap_Struct(cls, &grpc_rb_server_data_type, wrapper);
 }
 
@@ -309,7 +305,7 @@ static VALUE grpc_rb_server_shutdown_and_notify(VALUE self, VALUE timeout) {
     deadline = grpc_rb_time_timeval(timeout, /* absolute time*/ 0);
   }
 
-  grpc_rb_server_maybe_shutdown_and_notify(s, deadline);
+  grpc_rb_server_shutdown_and_notify(s, deadline);
 
   return Qnil;
 }