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.
This commit is contained in:
Willy Tarreau 2015-05-01 19:13:41 +02:00
parent 0fca4835b2
commit f83d3fe00a

View File

@ -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