mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-15 16:04:37 +00:00
BUG/MEDIUM: log: old processes with log foward section don't die on soft stop.
Old processes didn't die if a log foward section is declared and a soft stop is requested. This patch fix this issue and should be backpored in banches including the log forward feature.
This commit is contained in:
parent
a39ecbdac1
commit
c47ba59d1e
@ -3499,6 +3499,20 @@ int main(int argc, char **argv)
|
|||||||
px = px->next;
|
px = px->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* we might have to unbind some log forward proxies from some processes */
|
||||||
|
px = cfg_log_forward;
|
||||||
|
while (px != NULL) {
|
||||||
|
if (px->bind_proc && px->state != PR_STSTOPPED) {
|
||||||
|
if (!(px->bind_proc & (1UL << proc))) {
|
||||||
|
if (global.tune.options & GTUNE_SOCKET_TRANSFER)
|
||||||
|
zombify_proxy(px);
|
||||||
|
else
|
||||||
|
stop_proxy(px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
px = px->next;
|
||||||
|
}
|
||||||
|
|
||||||
/* we might have to unbind some peers sections from some processes */
|
/* we might have to unbind some peers sections from some processes */
|
||||||
for (curpeers = cfg_peers; curpeers; curpeers = curpeers->next) {
|
for (curpeers = cfg_peers; curpeers; curpeers = curpeers->next) {
|
||||||
if (!curpeers->peers_fe)
|
if (!curpeers->peers_fe)
|
||||||
|
22
src/proxy.c
22
src/proxy.c
@ -1275,6 +1275,28 @@ void soft_stop(void)
|
|||||||
stop_proxy(prs->peers_fe);
|
stop_proxy(prs->peers_fe);
|
||||||
prs = prs->next;
|
prs = prs->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
p = cfg_log_forward;
|
||||||
|
while (p) {
|
||||||
|
/* Zombie proxy, let's close the file descriptors */
|
||||||
|
if (p->state == PR_STSTOPPED &&
|
||||||
|
!LIST_ISEMPTY(&p->conf.listeners) &&
|
||||||
|
LIST_ELEM(p->conf.listeners.n,
|
||||||
|
struct listener *, by_fe)->state > LI_ASSIGNED) {
|
||||||
|
struct listener *l;
|
||||||
|
list_for_each_entry(l, &p->conf.listeners, by_fe) {
|
||||||
|
if (l->state > LI_ASSIGNED)
|
||||||
|
close(l->rx.fd);
|
||||||
|
l->state = LI_INIT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p->state != PR_STSTOPPED) {
|
||||||
|
stop_proxy(p);
|
||||||
|
}
|
||||||
|
p = p->next;
|
||||||
|
}
|
||||||
|
|
||||||
/* signal zero is used to broadcast the "stopping" event */
|
/* signal zero is used to broadcast the "stopping" event */
|
||||||
signal_handler(0);
|
signal_handler(0);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user