From a2cfd7e356f4d744294b510b05d88bf58304db25 Mon Sep 17 00:00:00 2001 From: William Lallemand Date: Tue, 24 Mar 2020 16:02:48 +0100 Subject: [PATCH] BUG/MINOR: peers: init bind_proc to 1 if it wasn't initialized Tim reported that in master-worker mode, if a stick-table is declared but not used in the configuration, its associated peers listener won't bind. This problem is due the fact that the master-worker and the daemon mode, depend on the bind_proc field of the peers proxy to disable the listener. Unfortunately the bind_proc is left to 0 if no stick-table were used in the configuration, stopping the listener on all processes. This fixes sets the bind_proc to the first process if it wasn't initialized. Should fix bug #558. Should be backported as far as 1.8. --- src/cfgparse.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/cfgparse.c b/src/cfgparse.c index 5424574c92..85fc185fb6 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -3907,6 +3907,19 @@ int check_config_validity() struct peers *curpeers = cfg_peers, **last; struct peer *p, *pb; + /* In the case the peers frontend was not initialized by a + stick-table used in the configuration, set its bind_proc + by default to the first process. */ + while (curpeers) { + if (!curpeers->peers_fe) + continue; + if (curpeers->peers_fe->bind_proc == 0) + curpeers->peers_fe->bind_proc = 1; + + curpeers = curpeers->next; + } + + curpeers = cfg_peers; /* Remove all peers sections which don't have a valid listener, * which are not used by any table, or which are bound to more * than one process.