]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: mworker: don't exit with an ambiguous value
authorWilliam Lallemand <wlallemand@haproxy.com>
Tue, 16 Apr 2019 15:42:43 +0000 (17:42 +0200)
committerWilly Tarreau <w@1wt.eu>
Tue, 16 Apr 2019 16:14:29 +0000 (18:14 +0200)
When the sigchld handler is called and waitpid() returns -1,
the behavior of waitpid() with the status variable is undefined.
It is not a good idea to exit with the value contained in it.

Since this exit path does not use the exitcode variable, it means that
this is an expected and successful exit.

This should be backported in 1.9, code has moved,
mworker_catch_sigchld() is in haproxy.c.

src/mworker.c

index b7bb859aa0c019dd07a46f97ff8d254891c8ea17..73e392801331ecd7e52ea65c8eb77466ce94e9cc 100644 (file)
@@ -295,11 +295,11 @@ restart_wait:
        }
        /* Better rely on the system than on a list of process to check if it was the last one */
        else if (exitpid == -1 && errno == ECHILD) {
-               ha_warning("All workers exited. Exiting... (%d)\n", (exitcode > 0) ? exitcode : status);
+               ha_warning("All workers exited. Exiting... (%d)\n", (exitcode > 0) ? exitcode : EXIT_SUCCESS);
                atexit_flag = 0;
                if (exitcode > 0)
-                       exit(exitcode);
-               exit(status); /* parent must leave using the latest status code known */
+                       exit(exitcode); /* parent must leave using the status code that provoked the exit */
+               exit(EXIT_SUCCESS);
        }
 
 }