diff options
author | seki <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-01-02 06:46:37 +0000 |
---|---|---|
committer | seki <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-01-02 06:46:37 +0000 |
commit | a7311e454130abadae232a8357bfb009d676aa08 (patch) | |
tree | 7bb03d733c3cd8c8a8e191b6d44fdbff42b114a8 /lib | |
parent | 7523f620dbb8804470f7f0ce9d0aed27e4f9f48e (diff) | |
download | ruby-a7311e454130abadae232a8357bfb009d676aa08.tar.gz ruby-a7311e454130abadae232a8357bfb009d676aa08.tar.xz ruby-a7311e454130abadae232a8357bfb009d676aa08.zip |
add lazy stop_service
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@7706 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r-- | lib/drb/drb.rb | 15 | ||||
-rw-r--r-- | lib/drb/extserv.rb | 5 |
2 files changed, 11 insertions, 9 deletions
diff --git a/lib/drb/drb.rb b/lib/drb/drb.rb index 210e16da2..78cf482c8 100644 --- a/lib/drb/drb.rb +++ b/lib/drb/drb.rb @@ -1333,7 +1333,11 @@ module DRb # Stop this server. def stop_service - @thread.kill + if Thread.current['DRb'] && Thread.current['DRb']['server'] == self + Thread.current['DRb']['stop_service'] = true + else + @thread.kill + end end # Convert a dRuby reference to the local object it refers to. @@ -1518,10 +1522,11 @@ module DRb end client.send_reply(succ, result) rescue nil ensure - unless succ - client.close - break - end + client.close unless succ + if Thread.current['DRb']['stop_service'] + Thread.new { stop_service } + end + break unless succ end end end diff --git a/lib/drb/extserv.rb b/lib/drb/extserv.rb index 4ed291305..7da8130c2 100644 --- a/lib/drb/extserv.rb +++ b/lib/drb/extserv.rb @@ -25,10 +25,7 @@ module DRb @invoker.unregist(@name) server = @server @server = nil - Thread.new do - sleep 1 - server.stop_service - end + server.stop_service true end |