From 88713683fed38fa5a7a649d065c73f4d945bade7 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Sat, 1 Feb 2014 23:08:59 -0500 Subject: [PATCH] * job.c (set_child_handler_action_flags): [SV 41341] Ensure signal handler is in place before alarm(1). --- job.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) 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 }