BUG/MEDIUM: mworker: stop proxies which have no listener in the master
The previous code was only stopping the listeners in the master, not the
entire proxy.
Since we now have a polling loop in the master, there might be some side
effects, indeed some things that are still initialized. For example the
checks were still running.
diff --git a/src/haproxy.c b/src/haproxy.c
index 08ad7e5..f8fba14 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -623,6 +623,8 @@
}
for (curproxy = proxies_list; curproxy; curproxy = curproxy->next) {
+ int listen_in_master = 0;
+
list_for_each_entry_safe(l, l_next, &curproxy->conf.listeners, by_fe) {
/* remove the listener, but not those we need in the master... */
if (!(l->options & LI_O_MWORKER)) {
@@ -634,8 +636,13 @@
else
unbind_listener(l);
delete_listener(l);
+ } else {
+ listen_in_master = 1;
}
}
+ /* if the proxy shouldn't be in the master, we stop it */
+ if (!listen_in_master)
+ curproxy->state = PR_STSTOPPED;
}
}