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)
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);
}