From: Paul Smith Date: Sun, 2 Feb 2014 04:08:59 +0000 (-0500) Subject: * job.c (set_child_handler_action_flags): [SV 41341] X-Git-Tag: 4.1~46 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=88713683fed38fa5a7a649d065c73f4d945bade7;p=thirdparty%2Fmake.git * job.c (set_child_handler_action_flags): [SV 41341] Ensure signal handler is in place before alarm(1). --- diff --git a/job.c b/job.c index 0b34e17c..e4a40aca 100644 --- a/job.c +++ b/job.c @@ -1116,10 +1116,20 @@ set_child_handler_action_flags (int set_handler, int set_alarm) /* If we're about to enter the read(), set an alarm to wake up in a second so we can check if the load has dropped and we can start more work. On the way out, turn off the alarm and set SIG_DFL. */ - alarm (set_handler ? 1 : 0); - sa.sa_handler = set_handler ? job_noop : SIG_DFL; - sa.sa_flags = 0; - sigaction (SIGALRM, &sa, NULL); + if (set_handler) + { + sa.sa_handler = job_noop; + sa.sa_flags = 0; + sigaction (SIGALRM, &sa, NULL); + alarm (1); + } + else + { + alarm (0); + sa.sa_handler = SIG_DFL; + sa.sa_flags = 0; + sigaction (SIGALRM, &sa, NULL); + } } #endif }