log: close previous log descriptor a bit later:
authorRobert Swiecki <robert@swiecki.net>
Sun, 25 Aug 2019 09:23:20 +0000 (11:23 +0200)
committerRobert Swiecki <robert@swiecki.net>
Sun, 25 Aug 2019 09:23:20 +0000 (11:23 +0200)
logs.cc

diff --git a/logs.cc b/logs.cc
index 7cea49ac66906e25e90ac1654a7bfb59a559fa1d..70994297007ce8c88792715c1b2a642571c9815e 100644 (file)
--- a/logs.cc
+++ b/logs.cc
@@ -76,18 +76,18 @@ void logLevel(enum llevel_t ll) {
 
 void logFile(const std::string& logfile) {
        _log_set = true;
-       /* Close previous log_fd */
-       if (_log_fd > STDERR_FILENO) {
-               close(_log_fd);
-       }
        int newlogfd = TEMP_FAILURE_RETRY(
            open(logfile.c_str(), O_CREAT | O_RDWR | O_APPEND | O_CLOEXEC, 0640));
-       setDupLogFdOr(newlogfd, STDERR_FILENO);
        if (newlogfd == -1) {
                PLOG_W("Couldn't open logfile open('%s')", logfile.c_str());
-       } else {
-               close(newlogfd);
+               return;
+       }
+       /* Close previous log_fd */
+       if (_log_fd > STDERR_FILENO) {
+               close(_log_fd);
        }
+       setDupLogFdOr(newlogfd, STDERR_FILENO);
+       close(newlogfd);
 }
 
 void logMsg(enum llevel_t ll, const char* fn, int ln, bool perr, const char* fmt, ...) {