MAJOR: mworker: exits the master on failure

This patch changes the behavior of the master during the exit of a
worker.

When a worker exits with an error code, for example in the case of a
segfault, all workers are now killed and the master leaves.

If you don't want this behavior you can use the option
"master-worker no-exit-on-failure".
diff --git a/doc/configuration.txt b/doc/configuration.txt
index ea326d1..6fb239a 100644
--- a/doc/configuration.txt
+++ b/doc/configuration.txt
@@ -869,19 +869,20 @@
   This global directive loads and executes a Lua file. This directive can be
   used multiple times.
 
-master-worker [exit-on-failure]
+master-worker [no-exit-on-failure]
   Master-worker mode. It is equivalent to the command line "-W" argument.
   This mode will launch a "master" which will monitor the "workers". Using
   this mode, you can reload HAProxy directly by sending a SIGUSR2 signal to
   the master.  The master-worker mode is compatible either with the foreground
   or daemon mode. It is recommended to use this mode with multiprocess and
   systemd.
-  The "exit-on-failure" option allows the master to kill every workers and
-  exit when one of the current workers died. It is convenient to combine this
-  option with Restart=on-failure in a systemd unit file in order to relaunch
-  the whole process.
+  By default, if a worker exits with a bad return code, in the case of a
+  segfault for example, all workers will be killed, and the master will leave.
+  It is convenient to combine this behavior with Restart=on-failure in a
+  systemd unit file in order to relaunch the whole process. If you don't want
+  this behavior, you must use the keyword "no-exit-on-failure".
 
-  See alors "-W" in the management guide.
+  See also "-W" in the management guide.
 
 nbproc <number>
   Creates <number> processes when going daemon. This requires the "daemon"
diff --git a/include/types/global.h b/include/types/global.h
index 0f50d45..a3d1e96 100644
--- a/include/types/global.h
+++ b/include/types/global.h
@@ -65,7 +65,7 @@
 #define GTUNE_RESOLVE_DONTFAIL   (1<<7)
 
 #define GTUNE_SOCKET_TRANSFER	 (1<<8)
-#define GTUNE_EXIT_ONFAILURE     (1<<9)
+#define GTUNE_NOEXIT_ONFAILURE   (1<<9)
 #define GTUNE_USE_SYSTEMD        (1<<10)
 
 /* Access level for a stats socket */
diff --git a/src/cfgparse.c b/src/cfgparse.c
index f70eafb..e7e32cf 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -716,8 +716,8 @@
 		if (alertif_too_many_args(1, file, linenum, args, &err_code))
 			goto out;
 		if (*args[1]) {
-			if (!strcmp(args[1], "exit-on-failure")) {
-				global.tune.options |= GTUNE_EXIT_ONFAILURE;
+			if (!strcmp(args[1], "no-exit-on-failure")) {
+				global.tune.options |= GTUNE_NOEXIT_ONFAILURE;
 			} else {
 				ha_alert("parsing [%s:%d] : '%s' only supports 'exit-on-failure' option.\n", file, linenum, args[0]);
 				err_code |= ERR_ALERT | ERR_FATAL;
diff --git a/src/haproxy.c b/src/haproxy.c
index faa46e0..891a021 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -759,7 +759,7 @@
 			if (current_child(exitpid)) {
 				ha_alert("Current worker %d left with exit code %d\n", exitpid, status);
 				if (status != 0 && status != 130 && status != 143
-				    && global.tune.options & GTUNE_EXIT_ONFAILURE) {
+				    && !(global.tune.options & GTUNE_NOEXIT_ONFAILURE)) {
 					ha_alert("exit-on-failure: killing every workers with SIGTERM\n");
 					mworker_kill(SIGTERM);
 				}