From 91723745c610f6c3f887e768b1e4b19a0baaa46c Mon Sep 17 00:00:00 2001 From: William Lallemand Date: Tue, 6 Nov 2018 17:37:14 +0100 Subject: [PATCH] MEDIUM: mworker: exit with the incriminated exit code The former behavior was to exit() the master process with the latest status code known, which was the one of the last process to exit. The problem is that the master process was not exiting with the status code which provoked the exit-on-failure. --- src/haproxy.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/haproxy.c b/src/haproxy.c index 6c4fe4448..62b9d1a78 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -193,6 +193,8 @@ static char *cur_unixsocket = NULL; int atexit_flag = 0; +static int exitcode = -1; + int nb_oldpids = 0; const int zero = 0; const int one = 1; @@ -827,6 +829,8 @@ restart_wait: if (status != 0 && status != 130 && status != 143 && !(global.tune.options & GTUNE_NOEXIT_ONFAILURE)) { ha_alert("exit-on-failure: killing every workers with SIGTERM\n"); + if (exitcode < 0) + exitcode = status; mworker_kill(SIGTERM); } } else { @@ -843,6 +847,8 @@ restart_wait: else if (exitpid == -1 && errno == ECHILD) { ha_warning("All workers exited. Exiting... (%d)\n", (exitcode > 0) ? exitcode : status); atexit_flag = 0; + if (exitcode > 0) + exit(exitcode); exit(status); /* parent must leave using the latest status code known */ }