The master won't change PID anymore in master workers + daemon mode. --- src/haproxy.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/haproxy.c b/src/haproxy.c index 5e3028d..e0b6462 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -157,6 +157,8 @@ struct global global = { /*********************************************************************/ +#define REEXEC_FLAG "HAPROXY_MWORKERS_REEXEC" + int stopping; /* non zero means stopping in progress */ int killed; /* non zero means a hard-stop is triggered */ int jobs = 0; /* number of active jobs (conns, listeners, active tasks, ...) */ @@ -444,6 +446,8 @@ static void master_reload() signal(SIGINT, SIG_DFL); signal(SIGTERM, SIG_DFL); + setenv(REEXEC_FLAG, "1", 1); + /* compute length */ while (next_argv[next_argc]) next_argc++; @@ -2081,6 +2085,7 @@ int main(int argc, char **argv) char errmsg[100]; int pidfd = -1; + init(argc, argv); signal_register_fct(SIGQUIT, dump, SIGQUIT); signal_register_fct(SIGUSR1, sig_soft_stop, SIGUSR1); @@ -2306,8 +2311,9 @@ int main(int argc, char **argv) * process live in background before forking children */ - // TODO: don't refork if it's a reexec - if ((global.mode & MODE_MWORKER) && (global.mode & MODE_DAEMON)) { + if ((getenv(REEXEC_FLAG) == NULL) + && (global.mode & MODE_MWORKER) + && (global.mode & MODE_DAEMON)) { ret = fork(); if (ret < 0) { Alert("[%s.main()] Cannot fork.\n", argv[0]); -- 2.10.2