From 90149ee346a2c242776b32e2ed38c472d09b70b6 Mon Sep 17 00:00:00 2001 From: Vincent Bernat Date: Fri, 21 Nov 2008 10:50:01 +0100 Subject: [PATCH] When monitored process dies early, handle this case gracefully --- src/priv.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/priv.c b/src/priv.c index 8935934a..a2967bbb 100644 --- a/src/priv.c +++ b/src/priv.c @@ -502,6 +502,7 @@ priv_init(char *chrootdir) struct passwd *user; struct group *group; gid_t gidset[1]; + int status; /* Create socket pair */ if (socketpair(AF_LOCAL, SOCK_DGRAM, PF_UNSPEC, pair) < 0) @@ -552,6 +553,9 @@ priv_init(char *chrootdir) signal(SIGINT, sig_pass_to_chld); signal(SIGQUIT, sig_pass_to_chld); signal(SIGCHLD, sig_chld); + if (waitpid(monitored, &status, WNOHANG) != 0) + /* Child is already dead */ + _exit(1); priv_loop(); exit(0); } -- 2.39.5