From: Takahiro Kambe Date: 2010-01-18T19:09:36+09:00 Subject: [ruby-dev:40115] Re: [Bug #2603] NetBSD 5.0以降でpthreadの処理に由来する不具合 こんにちは。 In message <20100118024036.D5B9D35D7E3@mta1.nttr.co.jp> on Mon, 18 Jan 2010 11:40:44 +0900, f-miura@nttr.co.jp (MIURA, Fumiaki) wrote: > 改良版かもしれないfork patchその2を作ってみました。 取り敢えず、 * RUBY_1_8 on NetBSD 5.0_STABLE * RUBY_1_8_7 on NetBSD current (4.99.23) でテストすると、同じ残念な結果となりました。前者の方の結果です。 o 環境 % uname -mrs NetBSD 5.0_STABLE i386 % ./ruby -v ruby 1.8.8dev (2010-01-17 revision 26335) [i386-netbsdelf5.0.] o 構成 % sh configure --enable-pthread (共有ライブラリを使用していません。) o コンパイル % make (make installは行っていません。) o 状況 ./ruby -rpurelib.rb ./test/runner.rb --basedir=./test --runner=console -v thread と実行しているプロセスが以下のsafe_mutex_lock()、CPPを展開すると pthread_mutex_lock()でブロックしていました。gdbで捕まえたstack traceは、 #0 0xbbbe2960 in pthread_mutex_lock () from /usr/lib/libpthread.so.0 #1 0x08056b7d in thread_timer (dummy=0xbfbfe2fc) at eval.c:12491 #2 0xbbbe59b7 in pthread_create () from /usr/lib/libpthread.so.0 #3 0xbbb0c3d0 in swapcontext () from /usr/lib/libc.so.12 となり、#1付近のソースコードは以下のようになっています。 12486 sigset_t all_signals; 12487 12488 sigfillset(&all_signals); 12489 pthread_sigmask(SIG_BLOCK, &all_signals, 0); 12490 12491 safe_mutex_lock(&running->lock); 12492 pthread_cond_signal(start); 12493 12494 #define WAIT_FOR_10MS() \ 12495 pthread_cond_timedwait(&running->cond, &running->lock, get_ts(&to, PER_NANO/100)) 何も変更していない場合は、このWAIT_FOR_10MS()を定義している後に続くルー プ内から抜け出れないで回っている状態でしたが、今度は完全に止まっている ようで、ktruss -p とかしても何もトレースした出力はされない状態です。 -- 神戸 隆博(かんべ たかひろ) at 仕事場