From: nagachika Date: 2010-08-19T18:39:59+09:00 Subject: [ruby-dev:42081] Re: [Bug #3674] dRuby サーバプロセスを停止する時に時間がかかることがある 近永と申します。 確認が遅くなってすみません。 頂いた修正を加えて、現象が発生していた環境で再現スクリプトを2000回くらい回して起きなくなったことを確認しました。 ただ差分を見ていてちょっと気がついたのですが、kill した Thread に ensure 節の処理があって、 それがブロックする可能性があるものだと、その Thread が終了するまで時間がかかることがあり、 その間は他の Thread が kill されず動き続けると思います。 別に手元のプログラムで問題が発生したというわけではないのですが、 元の動作に近づけるにはまず全体に kill を呼んでおいてから join したほうがいいかなと思いました。 Index: lib/drb/drb.rb =================================================================== --- lib/drb/drb.rb (revision 29026) +++ lib/drb/drb.rb (working copy) @@ -1418,8 +1418,14 @@ grp.add(Thread.current) list = @grp.list while list.size > 0 + list = list.map do |th| + th.kill if th.alive? + end.compact list.each do |th| - th.kill if th.alive? + begin + th.join + rescue Exception + end end list = @grp.list end