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


Reply via email to