aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Alexander Polcyn <apolcyn@google.com>2018-02-06 10:37:02 -0800
committerGravatar Alexander Polcyn <apolcyn@google.com>2018-02-06 11:13:06 -0800
commitd60ed8f1f88a2d0320d2fe7e3cb3ae71645f8400 (patch)
tree21f4e42551aff6defe41fbd5cabbef7213c7195d
parent7b87bab83263968e2b176d8ec7e8d85db715d306 (diff)
Guarantee no race between ruby server's shutdown_and_notify and destroy
-rw-r--r--src/ruby/lib/grpc/generic/rpc_server.rb12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/ruby/lib/grpc/generic/rpc_server.rb b/src/ruby/lib/grpc/generic/rpc_server.rb
index 640975109d..d96e677f20 100644
--- a/src/ruby/lib/grpc/generic/rpc_server.rb
+++ b/src/ruby/lib/grpc/generic/rpc_server.rb
@@ -244,9 +244,9 @@ module GRPC
fail 'Cannot stop before starting' if @running_state == :not_started
return if @running_state != :running
transition_running_state(:stopping)
+ deadline = from_relative_time(@poll_period)
+ @server.shutdown_and_notify(deadline)
end
- deadline = from_relative_time(@poll_period)
- @server.shutdown_and_notify(deadline)
@pool.stop
end
@@ -416,9 +416,11 @@ module GRPC
end
end
# @running_state should be :stopping here
- @run_mutex.synchronize { transition_running_state(:stopped) }
- GRPC.logger.info("stopped: #{self}")
- @server.close
+ @run_mutex.synchronize do
+ transition_running_state(:stopped)
+ GRPC.logger.info("stopped: #{self}")
+ @server.close
+ end
end
def new_active_server_call(an_rpc)