From febbce87baf15b610d30172e37b98133e92159cc Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 28 Aug 2020 18:45:01 +0200 Subject: [PATCH] BUG/MINOR: reload: do not fail when no socket is sent get_old_sockets() mistakenly sets ret=0 instead of ret2=0 before leaving when the old process announces zero FD. So it will return an error instead of success. This must be particularly rare not to have a single socket to offer though! A few comments were added to make it more obvious what to expect in return. This must be backported to 1.8 since the bug has always been there. --- src/haproxy.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/haproxy.c b/src/haproxy.c index a8d27f84e..03a05cdd4 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -1122,6 +1122,10 @@ static void cfgfiles_expand_directories(void) free(err); } +/* Retrieves old sockets from worker process running the CLI at address + * . Fills xfer_sock_list with what is found. Returns 0 on + * success, -1 on failure. + */ static int get_old_sockets(const char *unixsocket) { char *cmsgbuf = NULL, *tmpbuf = NULL; @@ -1173,7 +1177,7 @@ static int get_old_sockets(const char *unixsocket) goto out; } if (fd_nb == 0) { - ret = 0; + ret2 = 0; goto out; } tmpbuf = malloc(fd_nb * (1 + MAXPATHLEN + 1 + IFNAMSIZ + sizeof(int)));