From: sheepman Date: 2007-06-23T23:07:05+09:00 Subject: [ruby-dev:31038] deadlock dumps core こんばんは、sheepman です。 つぎのような deadlock を起こすコードを実行すると、 ruby-1.8 が core を吐きます。 --enable-pthread でコンパイルしています。 Linux 2.4.33-0vl0.5 i686 glibc-2.3.3-3vl1.3 です。 $ cat dlck.rb Thread.new do sleep 0.5 p 2 Thread.stop end sleep 0.1 p 1 Thread.stop $ ruby-1.8 -v dlck.rb ruby 1.8.6 (2007-06-18 patchlevel 5000) [i686-linux] 1 2 deadlock 0x4022e6fc: sleep:- (main) - dlck.rb:8 deadlock 0x40221a4c: sleep:- - dlck.rb:4 dlck.rb:4: [BUG] Segmentation fault ruby 1.8.6 (2007-06-18) [i686-linux] zsh: abort ruby-1.8 -v dlck.rb 以下のようなパッチで直りましたが、あんまり良く理解できていないので、自信はありません。 $ svn diff eval.c Index: eval.c =================================================================== --- eval.c (revision 12578) +++ eval.c (working copy) @@ -10527,7 +10527,7 @@ if (curr_thread == main_thread) { rb_exc_raise(e); } - rb_thread_main_jump(e, RESTORE_RAISE); + rb_thread_raise(1, &e, main_thread); } static void -- sheepman / TAMURA Takashi sheepman@sheepman.sakura.ne.jp