From: Serge Hallyn Date: Fri, 8 Nov 2013 17:41:16 +0000 (+0000) Subject: wait_on_damonized-start: wait only on the pid we want X-Git-Tag: lxc-1.0.0.alpha3~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=03f064ff7447816c89fff24de9b0a5076614dfd3;p=thirdparty%2Flxc.git wait_on_damonized-start: wait only on the pid we want Otherwise we can reap another thread's forked pid. Changelog: Per Dwight's suggestion, use pid_t for argument. Signed-off-by: Serge Hallyn Acked-by: Dwight Engen Acked-by: S.Çağlar Onur --- diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index 827cae0a6..ede011324 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c @@ -491,7 +491,7 @@ static bool lxcapi_wait(struct lxc_container *c, const char *state, int timeout) } -static bool wait_on_daemonized_start(struct lxc_container *c) +static bool wait_on_daemonized_start(struct lxc_container *c, int pid) { /* we'll probably want to make this timeout configurable? */ int timeout = 5, ret, status; @@ -500,7 +500,7 @@ static bool wait_on_daemonized_start(struct lxc_container *c) * our child is going to fork again, then exit. reap the * child */ - ret = wait(&status); + ret = waitpid(pid, &status, 0); if (ret == -1 || !WIFEXITED(status) || WEXITSTATUS(status) != 0) DEBUG("failed waiting for first dual-fork child"); return lxcapi_wait(c, "RUNNING", timeout); @@ -607,7 +607,7 @@ static bool lxcapi_start(struct lxc_container *c, int useinit, char * const argv return false; } if (pid != 0) - return wait_on_daemonized_start(c); + return wait_on_daemonized_start(c, pid); process_unlock(); // we're no longer sharing /* second fork to be reparented by init */