summaryrefslogtreecommitdiff
path: root/lib/drb
diff options
context:
space:
mode:
authorseki <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-01-02 06:46:37 +0000
committerseki <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-01-02 06:46:37 +0000
commit60f289bf2639cb5df895f8aec58af5ab1e2ea319 (patch)
tree7bb03d733c3cd8c8a8e191b6d44fdbff42b114a8 /lib/drb
parent3ba5337dfa1e358484074db1ed575e44acb643ce (diff)
add lazy stop_service
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7706 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/drb')
-rw-r--r--lib/drb/drb.rb15
-rw-r--r--lib/drb/extserv.rb5
2 files changed, 11 insertions, 9 deletions
diff --git a/lib/drb/drb.rb b/lib/drb/drb.rb
index 210e16da24..78cf482c86 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 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