diff options
author | seki <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-02-16 14:36:31 +0000 |
---|---|---|
committer | seki <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-02-16 14:36:31 +0000 |
commit | fe85864b9000c606f68213628aa5a85b0bd6d7ac (patch) | |
tree | 411b178a9147b4050e0bb7a55381999277777d5e /lib/drb | |
parent | a3eb5e75bb25a59a4b7e6c0a692a2d38f37cf799 (diff) |
add lazy stop_service.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@7979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/drb')
-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 a3abd45116..0fb791e3f7 100644 --- a/lib/drb/drb.rb +++ b/lib/drb/drb.rb @@ -1352,7 +1352,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. @@ -1556,10 +1560,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 4ed2913051..7da8130c2b 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 |