なかだです。 At Tue, 22 Feb 2005 12:57:32 +0900, Yukihiro Matsumoto wrote in [ruby-dev:25742]: > |昨日の夜からとあるプログラム (五月雨) が 4回ばかり core を吐いていて、 > |それらで最後に GC が起きた所が一致しています。 すいません、中途半端な状態で。 > 分かりました。スレッド生成のためスタックを巻き戻している最中 > にGCが起きると > > * curr_threadは生成元のスレッドを指している > * が、スレッド生成のためスタックは巻き戻されている > > ために生成元スタックがスキャンされず、オブジェクトがことごと > くGCに回収されてしまっていました。そこで、TAG_THREADをraise > する前にcurr_thread=thの設定と、thread_insert(th)の呼び出し > を行ってしまうことにしました。これはこれで問題を引き起こしそ > うですが。 これで問題が起きるのは、THREAD_SAVE_CONTEXT()までの処理が中断し てしまう場合だけだと思います。TAG_THREADがちゃんと捕まえて処理 されないか、THREAD_SAVE_CONTEXT()自体でエラーになるか。たぶんゴ ミスレッドが残るだけのような気がします。 > ついでに、new_threadの内容もGCスキャンするようにしてみました > が、こちらは不要だったかもしれません。 こちらはなくてもいいようです。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦