mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-25 07:41:36 +02:00
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.
This commit is contained in:
parent
ebc9244059
commit
78f8dcb7f0
@ -1552,7 +1552,6 @@ void unblock_sigchld(void)
|
||||
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 @@ static struct pid_list *pid_list_add(pid_t pid, struct task *t)
|
||||
return elem;
|
||||
}
|
||||
|
||||
/* Blocks blocks and then unblocks SIGCHLD */
|
||||
static void pid_list_del(struct pid_list *elem)
|
||||
{
|
||||
struct check *check;
|
||||
@ -1578,9 +1576,7 @@ static void pid_list_del(struct pid_list *elem)
|
||||
if (!elem)
|
||||
return;
|
||||
|
||||
block_sigchld();
|
||||
LIST_DEL(&elem->list);
|
||||
unblock_sigchld();
|
||||
if (!elem->exited)
|
||||
kill(elem->pid, SIGTERM);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user