This is to allow the pidfile to be more easily rewritten
if the pid a worker changes
---
 src/haproxy.c |   19 ++++++++++---------
 1 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/src/haproxy.c b/src/haproxy.c
index 35ee06e..c33c072 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -1358,13 +1358,6 @@ static void create_processes(int argc, char **argv, FILE 
*pidfile)
                        send_log(NULL, LOG_INFO, "Master started\n");
        }
 
-       rewind(pidfile);
-       ftruncate(fileno(pidfile), 0);
-       if (global.mode & MODE_MASTER_WORKER) {
-               fprintf(pidfile, "%d\n", pid);
-               fflush(pidfile);
-       }
-
        /* Store PIDs of worker processes in oldpid so
         * they can be signaled later */
        nb_oldpids = global.nbproc;
@@ -1396,8 +1389,6 @@ static void create_processes(int argc, char **argv, FILE 
*pidfile)
                                         "Worker #%d started\n", proc);
                        break;
                }
-               fprintf(pidfile, "%d\n", ret);
-               fflush(pidfile);
                oldpids[proc] = ret;
                relative_pid++; /* each child will get a different one */
        }
@@ -1432,6 +1423,16 @@ static void create_processes(int argc, char **argv, FILE 
*pidfile)
                global.mode |= MODE_QUIET; /* ensure that we won't say anything 
from now */
        }
 
+       if (pidfile && (is_master || !(global.mode & MODE_MASTER_WORKER))) {
+               rewind(pidfile);
+               ftruncate(fileno(pidfile), 0);
+               if (is_master)
+                       fprintf(pidfile, "%d\n", pid);
+               for (proc = 0; proc < nb_oldpids; proc++)
+                       fprintf(pidfile, "%d\n", oldpids[proc]);
+               fflush(pidfile);
+       }
+
        fork_poller();
 }
 
-- 
1.7.2.3


Reply via email to