From: William Lallemand Date: Wed, 21 Apr 2021 14:42:18 +0000 (+0200) Subject: BUG/MINOR: mworker/init: don't reset nb_oldpids in non-mworker cases X-Git-Tag: v2.4-dev17~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ea6bf83d621ceeaf3f7e7de59b45fa00940b784d;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/haproxy.c b/src/haproxy.c index 798173b41a..edc6d6501a 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); }