From: Willy Tarreau Date: Fri, 1 May 2015 17:13:41 +0000 (+0200) Subject: MEDIUM: init: stop any peers section not bound to the correct process X-Git-Tag: v1.6-dev2~153 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f83d3fe;p=thirdparty%2Fhaproxy.git 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 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