summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Lallemand <wlallemand@haproxy.org>2021-11-18 10:51:30 +0100
committerWilliam Lallemand <wlallemand@haproxy.org>2021-11-18 11:01:16 +0100
commitc4810b8cc8a30dd15a72cc9bcba359fc91f9b736 (patch)
tree03e6c5e9c17e097c84703be72c67a794b4f37fd7
parenta22d860406cd4274fb54fce14d57ed864fb006cb (diff)
downloadhaproxy-c4810b8cc8a30dd15a72cc9bcba359fc91f9b736.tar.gz
BUG/MEDIUM: mworker: cleanup the listeners when reexecuting
Previously, the cleanup of the listeners was done in mworker_loop(), which was called once the configuration file was parsed. HAProxy was switching in wait mode when the configuration failed to load, so no listeners where created. Since the latest change on the mworker mode, HAProxy switch to wait mode after successfuly loading the configuration, without cleaning its listeners, because it was done in mworker_loop, resulting in the master not closing its listeners and keeping them. The master needs its configuration to know which listeners it need to close, so that must be done before the exec(). This patch fixes the problem by cleaning the listeners in the mworker_reexec() function. No backport needeed.
-rw-r--r--src/haproxy.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/haproxy.c b/src/haproxy.c
index 187ba750a..3c04c58e6 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -709,6 +709,9 @@ static void mworker_reexec()
mworker_proc_list_to_env(); /* put the children description in the env */
+ /* ensure that we close correctly every listeners before reexecuting */
+ mworker_cleanlisteners();
+
/* during the reload we must ensure that every FDs that can't be
* reuse (ie those that are not referenced in the proc_list)
* are closed or they will leak. */
@@ -838,7 +841,6 @@ static void mworker_loop()
signal_register_fct(SIGCHLD, mworker_catch_sigchld, SIGCHLD);
mworker_unblock_signals();
- mworker_cleanlisteners();
mworker_cleantasks();
mworker_catch_sigchld(NULL); /* ensure we clean the children in case