From a8b2671cf6fd2edf1614397aac22db3bd08bba0a Mon Sep 17 00:00:00 2001 From: William Lallemand Date: Tue, 13 Nov 2018 18:30:12 +0100 Subject: [PATCH] BUG/MEDIUM: log: don't CLOEXEC the inherited FDs When configuring the logs with a FD and using the master worker, the FD was closed upon a reload because it was configured with CLOEXEC. It leads to using the wrong FD for the logs and to close them. Which is unfortunate since the master rely on the FD left opened during a reload. The fix is to stop doing a CLOEXEC when the FD is inherited. No backport needed. --- src/log.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/log.c b/src/log.c index f6eeacbec..896219468 100644 --- a/src/log.c +++ b/src/log.c @@ -1378,12 +1378,13 @@ void __send_log(struct proxy *p, int level, char *message, size_t size, char *sd nblogger, strerror(errno), errno); } continue; + } else { + /* we don't want to receive anything on this socket */ + setsockopt(*plogfd, SOL_SOCKET, SO_RCVBUF, &zero, sizeof(zero)); + /* does nothing under Linux, maybe needed for others */ + shutdown(*plogfd, SHUT_RD); + fcntl(*plogfd, F_SETFD, fcntl(*plogfd, F_GETFD, FD_CLOEXEC) | FD_CLOEXEC); } - /* we don't want to receive anything on this socket */ - setsockopt(*plogfd, SOL_SOCKET, SO_RCVBUF, &zero, sizeof(zero)); - /* does nothing under Linux, maybe needed for others */ - shutdown(*plogfd, SHUT_RD); - fcntl(*plogfd, F_SETFD, fcntl(*plogfd, F_GETFD, FD_CLOEXEC) | FD_CLOEXEC); } switch (logsrv->format) {