From fe85864b9000c606f68213628aa5a85b0bd6d7ac Mon Sep 17 00:00:00 2001 From: seki Date: Wed, 16 Feb 2005 14:36:31 +0000 Subject: [PATCH] add lazy stop_service. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@7979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ lib/drb/drb.rb | 15 ++++++++++----- lib/drb/extserv.rb | 5 +---- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5042d3ef43..71145f76c8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Wed Feb 16 23:34:30 2005 Masatoshi SEKI + + * lib/drb/drb.rb: add lazy stop_service. ([druby-ja:109]) + + * lib/drb/extserv.rb: ditto. + Wed Feb 16 17:07:57 2005 Hidetoshi NAGAI * ext/tk/tkutil.c: Follow the change of st.c (st_foreach) 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