mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-15 07:54:33 +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;
|
||||
}
|
||||
|
||||
/* 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 */
|
||||
for (curpeers = cfg_peers; curpeers; curpeers = curpeers->next) {
|
||||
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);
|
||||
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_handler(0);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user