From: "U.Nakamura" Date: 2007-03-28T10:38:48+09:00 Subject: [ruby-dev:30675] coredump on NetBSD with trunk こんにちは、なかむら(う)です。 NetBSD/i386 3.99.17(ちょっと古い)上でtrunkのrubyで ruby -rresolv -e 'p Resolv.getname("221.186.184.68") を実行すると、 ruby: Error detected by libpthread: Invalid condition variable. Detected by file "/usr/src/lib/libpthread/pthread_cond.c", line 91, function "pthread_cond_destroy". See pthread(3) for information. zsh: 668 abort (core dumped) ruby -rresolv -e 'p Resolv.getname("221.186.184.68")' となってcoreを吐きます。 調べてみると、thread_pthread.ciのnative_thread_destroy()の中 で、未初期化のth->native_thread_data.sleep_condを引数として pthread_cond_destroy()を呼んでいるのが原因のようです。 試しに以下のようなパッチを当ててみたところ、coreは吐かなくな りました。 # 吐かない代わりに例外が起きますが、これはどの環境でも出ると # 思うのでその話は割愛します。 ここで初期化するのがいいのかどうかはよくわかりませんが、どこ かで初期化しておくか初期化済みフラグを用意するとかする必要は あると思います。 Index: thread_pthread.ci =================================================================== --- thread_pthread.ci (リビジョン 12127) +++ thread_pthread.ci (作業コピー) @@ -252,6 +252,8 @@ th->status = THREAD_KILLED; rb_raise(rb_eThreadError, "can't create Thread (%d)", err); } + + pthread_cond_init(&th->native_thread_data.sleep_cond, 0); } return err; } それでは。 -- U.Nakamura