From: matz@... (Yukihiro Matsumoto) Date: 2002-08-21T16:44:36+09:00 Subject: [ruby-dev:18056] Re: [Bug] rb_thread_create sometimes returns 0 まつもと ゆきひろです In message "[ruby-dev:18054] Re: [Bug] rb_thread_create sometimes returns 0" on 02/08/21, Yukihiro Matsumoto writes: ||次のコードで,rb_thread_create が 0 を返す(rb_thread_start_0 の ||コメントで not reached となっている部分を通過する!)ために || undefined method `value' for false (NameError) ||という意味不明な例外が発生してしまうことがあります。 || ||ここで最終的に rb_load しようとしているスクリプトにはただ一行 || raise ||と書いてあるものです。また,メインスレッドの他に走っているスレッ ||ドはありません。 | |手元ではそのままでコンパイルできませんでしたし、少々手を加え |てコンパイルを通るようにしたものは例外を発生させませんでした。 |というわけで、もうちょっと情報がないとデバッグできません。 その後、いろいろ試してみると以下の修正で状況が変化するような 気がします。試してみてください。 --- eval.c 2002/08/19 03:41:00 1.316 +++ eval.c 2002/08/21 07:44:27 @@ -8868,9 +8868,10 @@ { - rb_thread_t th; + rb_thread_t curr, th; - while (curr_thread->status == THREAD_KILLED) { - curr_thread = curr_thread->prev; + curr = curr_thread; + while (curr->status == THREAD_KILLED) { + curr = curr_thread->prev; } - FOREACH_THREAD(th) { + FOREACH_THREAD_FROM(curr, th) { if (th->status != THREAD_KILLED) { @@ -8885,3 +8886,3 @@ } - END_FOREACH(th); + END_FOREACH_FROM(curr, th); }