upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/src/util.h
diff options
context:
space:
mode:
authorbitflash-maintainer <noreply@bitflash.invalid>2026-09-02 16:44:57 +0000
committerbitflash-maintainer <noreply@bitflash.invalid>2026-09-02 16:44:57 +0000
commit74f1d8598a6f603fdfaf6c0487375c40166b76ec (patch)
tree78300c2b30621c356461396392eb774139ab236d /src/util.h
parentcc21a1db50c14c0c41986e9137432e5ba8918b2d (diff)
log: do not latch the roll off when logrotate won the race
The latch added in 456b3b4 treats every rename() failure as permanent. One is not: if an external rotator moves debug.log between the size check and the rename, the rename fails ENOENT. Nothing is wrong -- the file has just been rotated by someone else, and the reopen above has already recreated it -- but latching there would switch the cap off for the rest of the run on a race the operator cannot see or fix. Treat ENOENT as "already rotated" and carry on. It cannot loop: the reopen leaves an empty file, so the next line's size check does not fire.
Diffstat (limited to 'src/util.h')
-rw-r--r--src/util.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/util.h b/src/util.h
index 362494c..f699e42 100644
--- a/src/util.h
+++ b/src/util.h
@@ -429,6 +429,15 @@ inline int OutputDebugStringF(const char* pszFormat, ...)
429 "debug.log grew past %lld MB; previous contents moved to debug.log.old (-maxdebugfilesize)\n", 429 "debug.log grew past %lld MB; previous contents moved to debug.log.old (-maxdebugfilesize)\n",
430 (long long)(nMaxDebugFileSize / 1024 / 1024)); 430 (long long)(nMaxDebugFileSize / 1024 / 1024));
431 } 431 }
432 else if (nRenameErrno == ENOENT)
433 {
434 // The file went away between the size check and the
435 // rename, so an external rotator (logrotate) got there
436 // first. Nothing left to roll and nothing wrong: the
437 // fopen above has already recreated it. Latching on this
438 // would let a benign race with logrotate switch the cap
439 // off for the rest of the run.
440 }
432 else 441 else
433 { 442 {
434 // The file is still over the cap, so this branch would be 443 // The file is still over the cap, so this branch would be