git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32525 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
kosaki 2011-07-12 05:12:29 +00:00
Родитель c307523565
Коммит 7fd8266516
1 изменённых файлов: 2 добавлений и 18 удалений

Просмотреть файл

@ -1021,31 +1021,15 @@ static void
init_sigchld(int sig) init_sigchld(int sig)
{ {
sighandler_t oldfunc; sighandler_t oldfunc;
#if USE_TRAP_MASK
sigset_t mask;
sigset_t fullmask;
/*
* disable interrupt. Otherwise following temmporal signal handler change
* has a race.
* Note: now we have only single thread, therefore both sigprocmask() and
* pthread_sigmask() makes the same effect.
*/
sigfillset(&fullmask);
pthread_sigmask(SIG_BLOCK, &fullmask, &mask);
#endif
rb_disable_interrupt();
oldfunc = ruby_signal(sig, SIG_DFL); oldfunc = ruby_signal(sig, SIG_DFL);
if (oldfunc != SIG_DFL && oldfunc != SIG_IGN) { if (oldfunc != SIG_DFL && oldfunc != SIG_IGN) {
ruby_signal(sig, oldfunc); ruby_signal(sig, oldfunc);
} else { } else {
GET_VM()->trap_list[sig].cmd = 0; GET_VM()->trap_list[sig].cmd = 0;
} }
rb_enable_interrupt();
#if USE_TRAP_MASK
sigdelset(&mask, sig);
pthread_sigmask(SIG_SETMASK, &mask, NULL);
#endif
} }
#endif #endif