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.
(cherry picked from commit f83d3fe00a7d8b90ead5924faca1e4b6df362aec)
diff --git a/src/haproxy.c b/src/haproxy.c
index 9a76d1b..60009cc 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -1548,6 +1548,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;
@@ -1607,6 +1608,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