From: Eric Wong Date: 2016-05-02T21:24:34+00:00 Subject: [ruby-core:75316] Re: [ruby-cvs:62052] normal:r54890 (trunk): process.c (disable_child_handler_fork_child): initialize handler for SIGPIPE normal@ruby-lang.org wrote: > https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=54890 Honestly, I don't understand why we use sigaction in here at all since all we set is SIG_DFL. signal(2) is portably defined for SIG_DFL and SIG_IGN. So maybe the following is a welcome simplification to reduce confusing #ifdefs. diff --git a/process.c b/process.c index 6f3fc23..09ddcd0 100644 --- a/process.c +++ b/process.c @@ -3485,43 +3485,17 @@ disable_child_handler_fork_child(struct child_handler_disabler_state *old, char { int sig; int ret; -#ifdef POSIX_SIGNAL - struct sigaction act, oact; - - act.sa_handler = SIG_DFL; - act.sa_flags = 0; - ret = sigemptyset(&act.sa_mask); /* async-signal-safe */ - if (ret == -1) { - ERRMSG("sigemptyset"); - return -1; - } -#else sig_t handler; -#endif for (sig = 1; sig < NSIG; sig++) { int reset = 0; #ifdef SIGPIPE if (sig == SIGPIPE) { reset = 1; -#ifndef POSIX_SIGNAL handler = SIG_DFL; -#endif } #endif if (!reset) { -#ifdef POSIX_SIGNAL - ret = sigaction(sig, NULL, &oact); /* async-signal-safe */ - if (ret == -1 && errno == EINVAL) { - continue; /* Ignore invalid signal number. */ - } - if (ret == -1) { - ERRMSG("sigaction to obtain old action"); - return -1; - } - reset = (oact.sa_flags & SA_SIGINFO) || - (oact.sa_handler != SIG_IGN && oact.sa_handler != SIG_DFL); -#else handler = signal(sig, SIG_DFL); if (handler == SIG_ERR && errno == EINVAL) { continue; /* Ignore invalid signal number */ @@ -3531,22 +3505,13 @@ disable_child_handler_fork_child(struct child_handler_disabler_state *old, char return -1; } reset = (handler != SIG_IGN && handler != SIG_DFL); -#endif } if (reset) { -#ifdef POSIX_SIGNAL - ret = sigaction(sig, &act, NULL); /* async-signal-safe */ - if (ret == -1) { - ERRMSG("sigaction to set default action"); - return -1; - } -#else handler = signal(sig, handler); if (handler == SIG_ERR) { ERRMSG("signal to set default action"); return -1; } -#endif } } Unsubscribe: