From: Masatoshi SEKI Date: 2010-08-17T00:00:38+09:00 Subject: [ruby-dev:42044] Re: [Bug #3674] dRuby サーバプロセスを停止する時に時間がかかることがある 咳といいます。 On 2010/08/16, at 11:29, Yusuke ENDOH wrote: > 遠藤です。 > > 2010年8月16日9:46 Tomoyuki Chikanaga : >>> えっと、Rubyのスレッドかなにか問題の報告と考えてよいのでしょうか? >>> >>> ここにThread.passが必要な理由がわかりません。 >>> 私がなにかしたほうがよいのでしょうか? >> >> なにを指摘しているのかあいまいな報告ですみませんでした。 >> >> Thread#kill のソース(rb_thread_kill)をみると、特に明示的なスレッドの切り替えを >> 発生させるようなところがなかったため、 >> DRbServer#kill_sub_thread の以下の while ループはタイマーで強制的に切り替えが発生するまで >> ぐるぐる回り続けるのではないかと考えました。 > > そうだと思います。[ruby-dev:40440] と同じような問題ですね。 状況を把握しました。 >> ということで Thread#kill で停止させた Thread が本当に停止して ThreadGroup から消えるには >> 明示的なスレッド切り替えが必要なのではないか(充分とは限りませんが)と考えた結果が先のパッチです。 > > 1.9 では Thread.pass はアーキテクチャによってはあてにならないらしい > ([ruby-dev:40060] の最後参照) ので、[ruby-dev:40440] のように join > した方がいいかと思いました。 なるほど! と書いておくと遠藤さんがcommitしてくれたりして。 Thread#joinって最後の値を取り出しますよね。たしか例外で終了した 場合は例外が再びあがるんじゃなかったけ。 begin thread.kill.join rescue なんとかえらー end みたいにしたほうがよいものですか?