diff options
Diffstat (limited to 'src/core/execute.c')
-rw-r--r-- | src/core/execute.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/core/execute.c b/src/core/execute.c index c59f7e2daa..99a7881f1c 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -37,6 +37,7 @@ #include <sys/mount.h> #include <linux/fs.h> #include <linux/oom.h> +#include <sys/poll.h> #ifdef HAVE_PAM #include <security/pam_appl.h> @@ -963,6 +964,7 @@ int exec_spawn(ExecCommand *command, CGroupBonding *cgroup_bondings, CGroupAttribute *cgroup_attributes, const char *cgroup_suffix, + int idle_pipe[2], pid_t *ret) { pid_t pid; @@ -1050,6 +1052,15 @@ int exec_spawn(ExecCommand *command, goto fail_child; } + if (idle_pipe) { + if (idle_pipe[1] >= 0) + close_nointr_nofail(idle_pipe[1]); + if (idle_pipe[0] >= 0) { + fd_wait_for_event(idle_pipe[0], POLLHUP, DEFAULT_TIMEOUT_USEC); + close_nointr_nofail(idle_pipe[0]); + } + } + /* Close sockets very early to make sure we don't * block init reexecution because it cannot bind its * sockets */ |