From 93fcf15ae499ddca8f8153695be6e1091a9031b9 Mon Sep 17 00:00:00 2001 From: Mike Yuan Date: Sun, 27 Apr 2025 20:28:32 +0200 Subject: [PATCH] socket-activate: set up SIGCHLD handler only in --accept mode --- src/socket-activate/socket-activate.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/socket-activate/socket-activate.c b/src/socket-activate/socket-activate.c index 1fd07bfa0de..e55f921c87c 100644 --- a/src/socket-activate/socket-activate.c +++ b/src/socket-activate/socket-activate.c @@ -265,13 +265,13 @@ static int do_accept(char * const *argv, int fd) { /* SIGCHLD handler. */ static void sigchld_hdl(int sig) { + int r; + PROTECT_ERRNO; for (;;) { - siginfo_t si; - int r; + siginfo_t si = {}; - si.si_pid = 0; r = waitid(P_ALL, 0, &si, WEXITED | WNOHANG); if (r < 0) { if (errno != ECHILD) @@ -463,10 +463,6 @@ static int run(int argc, char **argv) { assert(!strv_isempty(exec_argv)); - r = install_chld_handler(); - if (r < 0) - return r; - n = open_sockets(&epoll_fd, arg_accept); if (n < 0) return n; @@ -477,8 +473,13 @@ static int run(int argc, char **argv) { * since otherwise our process will be replaced and it's better to leave the readiness notify * to the actual payload. */ _unused_ _cleanup_(notify_on_cleanup) const char *notify = NULL; - if (arg_accept) + if (arg_accept) { + r = install_chld_handler(); + if (r < 0) + return r; + notify = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + } for (;;) { struct epoll_event event; -- 2.47.3