From 4cf4b33744d79fdc7c8d6a47b3c553c4367f36a1 Mon Sep 17 00:00:00 2001 From: William Lallemand Date: Tue, 16 Apr 2019 17:42:43 +0200 Subject: [PATCH] BUG/MINOR: mworker: don't exit with an ambiguous value 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 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mworker.c b/src/mworker.c index b7bb859aa..73e392801 100644 --- a/src/mworker.c +++ b/src/mworker.c @@ -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); } }