diff --git a/doc/configuration.txt b/doc/configuration.txt index 885659345..151cbb10b 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -4176,11 +4176,18 @@ quiet zero-warning When this option is set, HAProxy will refuse to start if any warning was - emitted while processing the configuration. It is highly recommended to set - this option on configurations that are not changed often, as it helps detect - subtle mistakes and keep the configuration clean and forward-compatible. Note - that "haproxy -c" will also report errors in such a case. This option is - equivalent to command line argument "-dW". + emitted while processing the configuration and applying it. It means that + warnings about bad combinations of parameters, warnings about very high + limits that couldn't be set, and so on, make the process exit with an error + during startup. A few late startup warnings cannot be caught by this option, + such as the failure to drop supplementary groups when changing the group ID + in "daemon" or "master-worker" modes, or the failure to mark the process + dumpable after the fork(). This option does not catch warnings emitted at + runtime. It is highly recommended to set this option on configurations that + are not changed often, as it helps to detect subtle mistakes and keep the + configuration clean and forward-compatible. Note that "haproxy -c" will also + report errors in such a case. This option is equivalent to command line + argument "-dW". 3.4. Userlists diff --git a/src/haproxy.c b/src/haproxy.c index c00947583..629a56fa9 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -3485,6 +3485,14 @@ int main(int argc, char **argv) clock_adjust_now_offset(); ready_date = date; + /* catch last warnings, which could be produced while adjusting limits + * or preallocating fds + */ + if (warned & WARN_ANY && global.mode & MODE_ZERO_WARNING) { + ha_alert("Some warnings were found and 'zero-warning' is set. Aborting.\n"); + exit(1); + } + if (global.mode & (MODE_DAEMON | MODE_MWORKER | MODE_MWORKER_WAIT)) { int ret = 0; int in_parent = 0;