CLEANUP: external-check: don't block/unblock SIGCHLD when manipulating the list
There's no point in blocking/unblocking sigchld when removing entries
from the list since the code is called asynchronously.
Similarly the blocking/unblocking could be removed from the connect_proc_chk()
function but it happens that at high signal rates, fork() takes twice as much
time to execute as it is regularly interrupted by a signal, so in the end this
signal blocking is beneficial there for performance reasons.
diff --git a/src/checks.c b/src/checks.c
index b925d05..51864e3 100644
--- a/src/checks.c
+++ b/src/checks.c
@@ -1552,7 +1552,6 @@
assert(sigprocmask(SIG_UNBLOCK, &set, NULL) == 0);
}
-/* Call with SIGCHLD blocked */
static struct pid_list *pid_list_add(pid_t pid, struct task *t)
{
struct pid_list *elem;
@@ -1570,7 +1569,6 @@
return elem;
}
-/* Blocks blocks and then unblocks SIGCHLD */
static void pid_list_del(struct pid_list *elem)
{
struct check *check;
@@ -1578,9 +1576,7 @@
if (!elem)
return;
- block_sigchld();
LIST_DEL(&elem->list);
- unblock_sigchld();
if (!elem->exited)
kill(elem->pid, SIGTERM);