From: nobu.nokada@... Date: 2005-06-26T14:38:14+09:00 Subject: Re: speeding up Process.detach frequency Hi, At Sun, 26 Jun 2005 13:39:35 +0900, nobu.nokada@softhome.net wrote in [ruby-talk:146500]: > Or if it's not enough, a patch to use SIGCHLD. Sorry, it was incomplete. Following is an additional patch. diff -U2 eval.c eval.c --- eval.c 26 Jun 2005 04:27:51 -0000 +++ eval.c 26 Jun 2005 05:01:37 -0000 @@ -10692,4 +10692,5 @@ int need_select = 0; int select_timeout = 0; + int do_pause = 0; #ifdef HAVE_NATIVETHREAD @@ -10766,4 +10767,7 @@ } } + if (th->wait_for & WAIT_PID) { + do_pause = 1; + } } END_FOREACH_FROM(curr, th); @@ -10890,8 +10894,9 @@ /* raise fatal error to main thread */ curr_thread->node = ruby_current_node; - if (curr->next == curr) { + if (do_pause || curr->next == curr) { TRAP_BEG; pause(); TRAP_END; + if (do_pause) return; } FOREACH_THREAD_FROM(curr, th) { diff -U2 signal.c signal.c --- signal.c 26 Jun 2005 04:33:30 -0000 +++ signal.c 26 Jun 2005 05:30:16 -0000 @@ -360,4 +360,5 @@ if (handler == SIG_IGN) sigact.sa_flags |= SA_NOCLDWAIT; #endif + sigact.sa_flags |= SA_RESTART; } #endif -- Nobu Nakada