BUG/MINOR: external-checks: do not unblock undesired signals

The external checks code makes use of block_sigchld() and unblock_sigchld()
to ensure nobody modifies the signals list while they're being manipulated.
It happens that these functions clear the list of blocked signals, so they
can possibly have a side effect if other signals are blocked. For now no
other signal is blocked but it may very well change in the future so rather
correctly use SIG_BLOCK/SIG_UNBLOCK instead of touching unrelated signals.

This fix should be backported to 1.6 for correctness.
This commit is contained in:
Willy Tarreau 2016-06-21 17:29:46 +02:00
parent 48d6bf2e82
commit ebc9244059

View file

@ -1541,14 +1541,15 @@ void block_sigchld(void)
sigset_t set;
sigemptyset(&set);
sigaddset(&set, SIGCHLD);
assert(sigprocmask(SIG_SETMASK, &set, NULL) == 0);
assert(sigprocmask(SIG_BLOCK, &set, NULL) == 0);
}
void unblock_sigchld(void)
{
sigset_t set;
sigemptyset(&set);
assert(sigprocmask(SIG_SETMASK, &set, NULL) == 0);
sigaddset(&set, SIGCHLD);
assert(sigprocmask(SIG_UNBLOCK, &set, NULL) == 0);
}
/* Call with SIGCHLD blocked */