summaryrefslogtreecommitdiff
path: root/lib/drb/drb.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/drb/drb.rb')
-rw-r--r--lib/drb/drb.rb23
1 files changed, 14 insertions, 9 deletions
diff --git a/lib/drb/drb.rb b/lib/drb/drb.rb
index 1d654b3c9f..3e2df7aafc 100644
--- a/lib/drb/drb.rb
+++ b/lib/drb/drb.rb
@@ -1466,12 +1466,7 @@ module DRb
if Thread.current['DRb'] && Thread.current['DRb']['server'] == self
Thread.current['DRb']['stop_service'] = true
else
- if @protocol.respond_to? :shutdown
- @protocol.shutdown
- else
- [@thread, *@grp.list].each {|thread| thread.kill} # xxx: Thread#kill
- end
- @thread.join
+ shutdown
end
end
@@ -1490,6 +1485,18 @@ module DRb
private
+ def shutdown
+ current = Thread.current
+ if @protocol.respond_to? :shutdown
+ @protocol.shutdown
+ else
+ [@thread, *@grp.list].each { |thread|
+ thread.kill unless thread == current # xxx: Thread#kill
+ }
+ end
+ @thread.join unless @thread == current
+ end
+
##
# Starts the DRb main loop in a new thread.
@@ -1671,9 +1678,7 @@ module DRb
error_print(e) if verbose
ensure
client.close unless succ
- if Thread.current['DRb']['stop_service']
- Thread.new { stop_service }
- end
+ shutdown if Thread.current['DRb']['stop_service']
break unless succ
end
end