[git commit] syslogd: Unify unlink/truncate + unlock log-rotation logic
vda.linux at googlemail.com
Mon Jun 2 01:11:40 UTC 2014
Always unlink + reopen, rather than sometimes using ftruncate();
using a single code-path reduces the opportunity for either
mistakes or duplicate code.
Signed-off-by: Joshua Judson Rosen <jrosen at harvestai.com>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
sysklogd/syslogd.c | 30 +++++++++++-------------------
1 files changed, 11 insertions(+), 19 deletions(-)
diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c
index d77fc94..f758510 100644
@@ -648,32 +648,24 @@ static void log_locally(time_t now, char *msg, logFile_t *log_file)
/* newFile == "f.0" now */
- /* 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:
- fl.l_type = F_UNLCK;
- fcntl(log_file->fd, F_SETLKW, &fl);
- 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;
fl.l_type = F_UNLCK;
fcntl(log_file->fd, F_SETLKW, &fl);
+ goto reopen;
More information about the busybox-cvs