Commit
37c3dfc9 sets the wait status on only the child pid. It
intended to match the pid only once to protect against pid reuse but it
won't because the indicator was reset to 0 every time at the top of the
loop. If the child pid is reused, the wait status will be set again.
Fix by setting indicator outside the loop.
Signed-off-by: Dwight Engen <dwight.engen@oracle.com>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
int err = -1;
char **aargv;
sigset_t mask, omask;
- int i, shutdown = 0;
+ int i, have_status = 0, shutdown = 0;
while (1) {
int ret = getopt_long_only(argc, argv, "", options, NULL);
err = 0;
for (;;) {
int status;
- int orphan = 0;
pid_t waited_pid;
switch (was_interrupted) {
* (not wrapped pid) and continue to wait for
* the end of the orphan group.
*/
- if ((waited_pid != pid) || (orphan ==1))
- continue;
- orphan = 1;
- err = lxc_error_set_and_log(waited_pid, status);
+ if (waited_pid == pid && !have_status) {
+ err = lxc_error_set_and_log(waited_pid, status);
+ have_status = 1;
+ }
}
out:
return err;