From: Kevin Clark Date: Wed, 18 Jun 2008 01:18:41 +0000 (+0000) Subject: rb: Wrap a semaphore around @serverTransport.close in NonblockingServer.shutdown X-Git-Tag: 0.2.0~531 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=e1d35fa5557f0bbd5a2e672314933da315bd60f2;p=common%2Fthrift.git rb: Wrap a semaphore around @serverTransport.close in NonblockingServer.shutdown git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@669020 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/lib/rb/lib/thrift/server/nonblockingserver.rb b/lib/rb/lib/thrift/server/nonblockingserver.rb index 283d5f59..054c4d73 100644 --- a/lib/rb/lib/thrift/server/nonblockingserver.rb +++ b/lib/rb/lib/thrift/server/nonblockingserver.rb @@ -15,6 +15,7 @@ module Thrift @logger = logger end @shutdown_semaphore = Mutex.new + @transport_semaphore = Mutex.new end def serve @@ -33,7 +34,9 @@ module Thrift @logger.info "#{self} is shutting down, goodbye" end ensure - @serverTransport.close + @transport_semaphore.synchronize do + @serverTransport.close + end @io_manager.ensure_closed unless @io_manager.nil? end @@ -46,7 +49,9 @@ module Thrift # but we can't change the order of operations here, so lets thread shutdown_proc = lambda do @io_manager.shutdown(timeout) - @serverTransport.close # this will break the accept loop + @transport_semaphore.synchronize do + @serverTransport.close # this will break the accept loop + end end if block shutdown_proc.call