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