MEDIUM: init: stop any peers section not bound to the correct process
This will prevent the peers section from remaining in listen state on
the incorrect process. The peers_fe pointer is set to NULL, which will
tell the peers task to commit suicide if it was already scheduled.
diff --git a/src/haproxy.c b/src/haproxy.c
index b5144a7..233c434 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -1740,6 +1740,7 @@
if (global.mode & (MODE_DAEMON | MODE_SYSTEMD)) {
struct proxy *px;
+ struct peers *curpeers;
int ret = 0;
int *children = calloc(global.nbproc, sizeof(int));
int proc;
@@ -1799,6 +1800,19 @@
px = px->next;
}
+ /* we might have to unbind some peers sections from some processes */
+ for (curpeers = peers; curpeers; curpeers = curpeers->next) {
+ if (!curpeers->peers_fe)
+ continue;
+
+ if (curpeers->peers_fe->bind_proc & (1UL << proc))
+ continue;
+
+ stop_proxy(curpeers->peers_fe);
+ /* disable this peer section so that it kills itself */
+ curpeers->peers_fe = NULL;
+ }
+
free(children);
children = NULL;
/* if we're NOT in QUIET mode, we should now close the 3 first FDs to ensure