From: "H.Yamamoto" Date: 2005-12-30T13:24:15+09:00 Subject: [ruby-dev:28187] Re: generator.rb deadlocks 山本です。 >私の環境でも症状は出なくなりました。 > >でも、Thread.pass を入れて解決、というのは違うんじゃないですか? > >Thread.pass で他のスレッドは動いたからといって、問題のスレッ >ドが止まる前に戻ってくる可能性はあるわけですよね。 > >RUBY_ALWAYS_GC のせいで ruby が遅いとか、他の (例えば root >が nice で優先度をあげた) プロセスが突如激しく計算を行って >ruby がしばらく遅いとかという状況で、SIGVTARLM が何回もくる >とか。 すみません、ruby の Thread をよく理解してないので・・・ Thread.stop は @loop_thread の先頭にあるし、一回 pass してやれば 十分かと思ったのですが、確かに不十分だったかもしれません。 こんな感じでしょうか? Index: generator.rb =================================================================== RCS file: /src/ruby/lib/generator.rb,v retrieving revision 1.7 diff -u -w -b -p -r1.7 generator.rb --- generator.rb 30 Dec 2005 03:24:18 -0000 1.7 +++ generator.rb 30 Dec 2005 04:11:24 -0000 @@ -81,7 +81,7 @@ class Generator @main_thread.wakeup end end - Thread.pass # ensure @loop_thread to be stopped + Thread.pass until @loop_thread.stop? self end