diff options
author | Alexander Polcyn <apolcyn@google.com> | 2018-02-06 10:37:02 -0800 |
---|---|---|
committer | Alexander Polcyn <apolcyn@google.com> | 2018-02-06 11:13:06 -0800 |
commit | d60ed8f1f88a2d0320d2fe7e3cb3ae71645f8400 (patch) | |
tree | 21f4e42551aff6defe41fbd5cabbef7213c7195d | |
parent | 7b87bab83263968e2b176d8ec7e8d85db715d306 (diff) |
Guarantee no race between ruby server's shutdown_and_notify and destroy
-rw-r--r-- | src/ruby/lib/grpc/generic/rpc_server.rb | 12 |
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) |