From 2fd45fae46823bb2ce059e2e5ca4db40db1c49af Mon Sep 17 00:00:00 2001 From: William Lallemand Date: Mon, 3 Dec 2018 20:34:44 +0100 Subject: [PATCH] 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. --- src/haproxy.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/haproxy.c b/src/haproxy.c index 08ad7e5a2..f8fba140f 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -623,6 +623,8 @@ static void mworker_cleanlisteners() } 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 @@ static void mworker_cleanlisteners() 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; } }