まつもと ゆきひろです

In message "Re: [ruby-dev:25004] Re: IO#flush dumps core again"
    on Wed, 1 Dec 2004 01:21:37 +0900, nobu / ruby-lang.org writes:

|IO#flushの問題というよりは、trapを跨いだContinuationの呼び出し
|が問題だと思うんですが、あってるでしょうか。

signal handler内で作られる継続が問題です。trap_immediateでは
直接signal handlerからハンドラブロックを評価しているのがいけ
ないので、以下のようにデフォルトのハンドラだけ直接評価するよ
うにしてみました。

--- signal.c	29 Jun 2004 01:31:33 -0000	1.54
+++ signal.c	30 Nov 2004 17:28:16 -0000	1.55
@@ -419,3 +419,3 @@ sighandler(sig)
 
-    if (ATOMIC_TEST(rb_trap_immediate)) {
+    if (trap_list[sig].cmd == 0 && ATOMIC_TEST(rb_trap_immediate)) {
 	IN_MAIN_CONTEXT(signal_exec, sig);