なかだです。

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はできる。
    中田 伸悦