From ea6bf83d621ceeaf3f7e7de59b45fa00940b784d Mon Sep 17 00:00:00 2001 From: William Lallemand Date: Wed, 21 Apr 2021 16:42:18 +0200 Subject: [PATCH] BUG/MINOR: mworker/init: don't reset nb_oldpids in non-mworker cases This bug affects the peers synchronisation code which rely on the nb_oldpids variable to synchronize the peer from the old PID. In the case the process is not started in master-worker mode and tries to synchronize using the peers, there is a small chance that won't work because nb_oldpids equals 0. Fix the bug by setting the variable to 0 only in the case of the master-worker when not reloaded. It could also be a problem when trying to synchronize the peers between 2 masters process which should be fixed in another patch. Bug exists since commit 8a361b5 ("BUG/MEDIUM: mworker: don't reuse PIDs passed to the master"). Sould be backported as far as 1.8. --- src/haproxy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/haproxy.c b/src/haproxy.c index 798173b41..edc6d6501 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -2817,7 +2817,7 @@ int main(int argc, char **argv) if ((global.mode & MODE_MWORKER) && !(global.mode & MODE_MWORKER_WAIT)) mworker_kill_max_reloads(SIGTERM); - if ((getenv("HAPROXY_MWORKER_REEXEC") == NULL)) { + if ((global.mode & MODE_MWORKER) && (getenv("HAPROXY_MWORKER_REEXEC") == NULL)) { nb_oldpids = 0; ha_free(&oldpids); }