Daniel Shahaf <[email protected]> writes:
> I think we have two options to fix this: either make signum_cancelled
> a write-once variable (never write to it if it's nonzero), or have the
> handler install SIG_IGN handlers for all signals we catch, not just for
> one of them. Or perhaps both? The former approach seems more robust
> but the latter seems like a good idea in its own right.
There is a race right at the end but there is also a race with a much
bigger window earlier. When a signal, say SIGINT, causes the program to
begin the process of cancelling then a second signal, say SIGTERM, can
arrive before we get to the exit code.
When there are two different signals I don't think there is a 'correct'
signal with which to exit, all that matters is that we exit with one of
the signals. So how about:
int saved_signum = signum_cancelled;
apr_signal(saved_signum, SIG_DFL);
kill(getpid(), saved_signum);
--
Philip Martin
WANdisco