You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by kc...@apache.org on 2008/06/18 03:18:42 UTC

svn commit: r669020 - /incubator/thrift/trunk/lib/rb/lib/thrift/server/nonblockingserver.rb

Author: kclark
Date: Tue Jun 17 18:18:41 2008
New Revision: 669020

URL: http://svn.apache.org/viewvc?rev=669020&view=rev
Log:
rb: Wrap a semaphore around @serverTransport.close in NonblockingServer.shutdown

Modified:
    incubator/thrift/trunk/lib/rb/lib/thrift/server/nonblockingserver.rb

Modified: incubator/thrift/trunk/lib/rb/lib/thrift/server/nonblockingserver.rb
URL: http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/rb/lib/thrift/server/nonblockingserver.rb?rev=669020&r1=669019&r2=669020&view=diff
==============================================================================
--- incubator/thrift/trunk/lib/rb/lib/thrift/server/nonblockingserver.rb (original)
+++ incubator/thrift/trunk/lib/rb/lib/thrift/server/nonblockingserver.rb Tue Jun 17 18:18:41 2008
@@ -15,6 +15,7 @@
         @logger = logger
       end
       @shutdown_semaphore = Mutex.new
+      @transport_semaphore = Mutex.new
     end
 
     def serve
@@ -33,7 +34,9 @@
         @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 @@
       # 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