From f83d3fe00a7d8b90ead5924faca1e4b6df362aec Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 1 May 2015 19:13:41 +0200 Subject: [PATCH] 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. --- src/haproxy.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/haproxy.c b/src/haproxy.c index b5144a7fd6..233c434b46 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -1740,6 +1740,7 @@ int main(int argc, char **argv) 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 @@ int main(int argc, char **argv) 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 -- 2.39.5