← Commit list

9aa6ffb22

Joshua Judson Rosen
Joshua Judson Rosen
2014-06-02
SUCCESS Duration: 136s

Subject

syslogd: Unify unlink/truncate + unlock log-rotation logic

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

sysklogd/syslogd.c+11 -19
@@ -648,32 +648,24 @@ static void log_locally(time_t now, char *msg, logFile_t *log_file)
}
/* newFile == "f.0" now */
rename(log_file->path, newFile);
- /* Incredibly, if F and F.0 are hardlinks, POSIX
- * _demands_ that rename returns 0 but does not
- * remove F!!!
- * (hardlinked F/F.0 pair was observed after
- * power failure during rename()).
- * Ensure old file is gone:
- */
- unlink(log_file->path);
-#ifdef SYSLOGD_WRLOCK
- fl.l_type = F_UNLCK;
- fcntl(log_file->fd, F_SETLKW, &fl);
-#endif
- close(log_file->fd);
- goto reopen;
}
- /* We don't get here unless G.logFileRotate == 0;
- * in which case don't bother unlinking and reopening,
- * just truncate and reset size to match:
+ /* We may or may not have just renamed the file away;
+ * if we didn't rename because we aren't keeping any backlog,
+ * then it's time to clobber the file. If we did rename it...,
+ * incredibly, if F and F.0 are hardlinks, POSIX _demands_
+ * that rename returns 0 but does not remove F!!!
+ * (hardlinked F/F.0 pair was observed after
+ * power failure during rename()).
+ * So ensure old file is gone in any case:
*/
- ftruncate(log_file->fd, 0);
- log_file->size = 0;
+ unlink(log_file->path);
#ifdef SYSLOGD_WRLOCK
fl.l_type = F_UNLCK;
fcntl(log_file->fd, F_SETLKW, &fl);
#endif
+ close(log_file->fd);
+ goto reopen;
}
log_file->size +=
#endif