]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
lxc-execute to return exit code of its child not others
authorMichel Normand <normand@fr.ibm.com>
Thu, 25 Jun 2009 09:21:56 +0000 (11:21 +0200)
committerDaniel Lezcano <dlezcano@fr.ibm.com>
Thu, 25 Jun 2009 09:21:56 +0000 (11:21 +0200)
lxc-execute has to return the exit code of it's child not others
as today's code would return the exit code of the last child.
We need to track the first process we launched and store its
exit status when it exits. In order to avoid to detect the exit
of this pid several time if the pids number wrap, we put an extra
flag saying the process group is orhpan.

Signed-off-by: Michel Normand <normand@fr.ibm.com>
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
src/lxc/lxc_init.c

index 964730706584a2a0452b36c477260a0c8eb2f91e..3ed99b6203b964060cdc9047e6afefe91017f6ce 100644 (file)
@@ -106,8 +106,10 @@ int main(int argc, char *argv[])
                exit(err);
        }
 
+       err = 0;
        for (;;) {
                int status;
+               int orphan = 0;
                pid_t waited_pid;
 
                waited_pid = wait(&status);
@@ -118,9 +120,16 @@ int main(int argc, char *argv[])
                                continue;
                        ERROR("failed to wait child : %s", strerror(errno));
                        goto out;
-               } else {
-                       err = lxc_error_set_and_log(waited_pid, status);
                }
+
+               /*
+                * keep the exit code of started application (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);
        }
 out:
        return err;