b0a119a128
1.34 Wed 55 13 2017 - We now use a a global Mutex object for each open file that gracefully handles locking between threads and across forks. This fixes the following deadlock scenarios: - a $SIG{__WARN__} handler is installed that logs to Log::Dispatch::FileRotate and log_message issues a warning. - multiple dispatchers are in logit() at the same time. - Abstract locking functions into Log::Dispatch::FileRotoate::Flock module. - Remove flock()'ing of the logfile filehandle. Rely on the lock that we hold on the "lockfile" instead to synchronize writes. [Github #12] holding a lock on the lockfile when writing the log message. - Various pod cleanups and enhancements (Thanks Emanuele Tomasi) - Avoid multiple stat() calls on the same filehandle (Thanks Emanuele Tomasi) - Add user_constraint option to use a custom function to determine when rotation happens (Thanks Emanuele Tomasi). - Move rotation code into its own function (Thanks Emanuele Tomasi) 1.30 Thu Aug 03 2017 - Docs: fix synopsis usage to "name" (incorrect) instead of filename (correct) (Thanks Emanuele Tomasi) - improve debug() routine so that all debug messages have the same layout (Thanks Emanuele Tomasi) - fix race condition in lockfile-race-condition.t [sic] (Thanks Emanuele Tomasi) 1.29 Fri Jul 28 2017 - Fix deadlock on Windows due to the fact that stat() on a filehandle vs a path doesn't return the same device field on Windows. 1.28 Thu Jul 27 2017 *** Multiple fixes to locking code: - flock() can be interrupted by a syscall. work around by using a safe_flock() wrapper that retries if errno is EAGAIN (and also EWOULDBLOCK). - handle several possible race conditions between open() and flock(). - DESTROY() was unlinking the lockfile (.logfile.LCK). This was the cause of a race condition where multiple processes could enter the critical seciton at the same time. Avoided by leaving .LCK files in place. Probably fixes #77075 (Thanks Emanuele Tomasi). - add author test for DESTROY lockfile race condition. 1.27 Thu Jul 06 2017 - add "check_both" configuration option which allows the use of both time and size based rotation at the same time. If either conditions require a rotation, a rotation will happen. Default is false (previous behaviour). Thanks Emanuele Tomasi. PR #6. - make signature test an "author" test and make Test::Signature optional |
||
---|---|---|
.. | ||
DESCR | ||
distinfo | ||
Makefile |