Feature #9345 ยป 0001-signal.c-avoid-repeatedly-disable-enable-interrupt-a.patch
signal.c | ||
---|---|---|
{
|
||
sighandler_t old;
|
||
/* At this time, there is no subthread. Then sigmask guarantee atomics. */
|
||
rb_disable_interrupt();
|
||
old = ruby_signal(signum, handler);
|
||
/* signal handler should be inherited during exec. */
|
||
if (old != SIG_DFL) {
|
||
ruby_signal(signum, old);
|
||
}
|
||
rb_enable_interrupt();
|
||
}
|
||
#if defined(SIGCLD) || defined(SIGCHLD)
|
||
... | ... | |
{
|
||
sighandler_t oldfunc;
|
||
rb_disable_interrupt();
|
||
oldfunc = ruby_signal(sig, SIG_DFL);
|
||
if (oldfunc != SIG_DFL && oldfunc != SIG_IGN) {
|
||
ruby_signal(sig, oldfunc);
|
||
} else {
|
||
GET_VM()->trap_list[sig].cmd = 0;
|
||
}
|
||
rb_enable_interrupt();
|
||
}
|
||
#endif
|
||
... | ... | |
rb_alias(rb_eSignal, rb_intern("signm"), rb_intern("message"));
|
||
rb_define_method(rb_eInterrupt, "initialize", interrupt_init, -1);
|
||
/* At this time, there is no subthread. Then sigmask guarantee atomics. */
|
||
rb_disable_interrupt();
|
||
install_sighandler(SIGINT, sighandler);
|
||
#ifdef SIGHUP
|
||
install_sighandler(SIGHUP, sighandler);
|
||
... | ... | |
#elif defined(SIGCHLD)
|
||
init_sigchld(SIGCHLD);
|
||
#endif
|
||
rb_enable_interrupt();
|
||
}
|