summaryrefslogtreecommitdiff
path: root/src/timeout.c
diff options
context:
space:
mode:
authorPádraig Brady <P@draigBrady.com>2009-12-07 19:00:04 +0000
committerPádraig Brady <P@draigBrady.com>2009-12-08 15:17:01 +0000
commit73d46261344d5bd05c0940bc2ec5f9ed9a47db1b (patch)
treea8f47c3c6d786de38da1688a8af5b920be31de6a /src/timeout.c
parent7ac41f995014067dd4f9eb6f75875f44f761e49a (diff)
downloadcoreutils-73d46261344d5bd05c0940bc2ec5f9ed9a47db1b.tar.xz
timeout: fix failure if timeout's parent has ignored SIGCHLD
* src/timeout.c (main): Reset the SIGCHLD handler to the default as otherwise wait() could return -1 and set errno to ECHILD. This condition was ignored until commit 0b1dcf33, on 31-08-2009, "timeout: defensive handling of all wait() errors" but subsequently timeout would run the command correctly but then fail with an error message. * tests/misc/timeout: In a subshell set the CHLD handler to SIG_IGN to ensure the timeout command resets it to SIG_DFL. * NEWS: Mention the fix.
Diffstat (limited to 'src/timeout.c')
-rw-r--r--src/timeout.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/timeout.c b/src/timeout.c
index 3babb8c26..c7753d4d2 100644
--- a/src/timeout.c
+++ b/src/timeout.c
@@ -275,6 +275,7 @@ main (int argc, char **argv)
install_signal_handlers (term_signal);
signal (SIGTTIN, SIG_IGN); /* don't sTop if background child needs tty. */
signal (SIGTTOU, SIG_IGN); /* don't sTop if background child needs tty. */
+ signal (SIGCHLD, SIG_DFL); /* Don't inherit CHLD handling from parent. */
monitored_pid = fork ();
if (monitored_pid == -1)