summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorseki <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-02-16 14:36:31 +0000
committerseki <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-02-16 14:36:31 +0000
commit4ec3ebe9e4a490a0bbeae5f952adef0bd2c25468 (patch)
tree411b178a9147b4050e0bb7a55381999277777d5e
parent9be9e33f673c194e97184951548444861f1905b3 (diff)
downloadruby-4ec3ebe9e4a490a0bbeae5f952adef0bd2c25468.tar.gz
ruby-4ec3ebe9e4a490a0bbeae5f952adef0bd2c25468.tar.xz
ruby-4ec3ebe9e4a490a0bbeae5f952adef0bd2c25468.zip
add lazy stop_service.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@7979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--lib/drb/drb.rb15
-rw-r--r--lib/drb/extserv.rb5
3 files changed, 17 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 5042d3ef4..71145f76c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Wed Feb 16 23:34:30 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * 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 <nagai@ai.kyutech.ac.jp>
* 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 a3abd4511..0fb791e3f 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 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