Index: src/Appender/FileAppender.cs =================================================================== --- src/Appender/FileAppender.cs (revision 1710751) +++ src/Appender/FileAppender.cs (working copy) @@ -647,7 +647,6 @@ public class InterProcessLock : LockingModelBase { private Mutex m_mutex = null; - private bool m_mutexClosed = false; private Stream m_stream = null; /// @@ -703,7 +702,7 @@ finally { m_mutex.ReleaseMutex(); m_mutex.Close(); - m_mutexClosed = true; + m_mutex = null; } } @@ -736,7 +735,7 @@ /// public override void ReleaseLock() { - if (m_mutexClosed == false && m_mutex != null) + if (m_mutex != null) { m_mutex.ReleaseMutex(); } Index: tests/src/Appender/RollingFileAppenderTest.cs =================================================================== --- tests/src/Appender/RollingFileAppenderTest.cs (revision 1710751) +++ tests/src/Appender/RollingFileAppenderTest.cs (working copy) @@ -1397,6 +1397,20 @@ /// A configured ILogger private static ILogger CreateLogger(string filename, FileAppender.LockingModelBase lockModel, IErrorHandler handler) { + return CreateLogger(filename, lockModel, handler, 100000, 0); + } + + /// + /// Creates a logger hierarchy, configures a rolling file appender and returns an ILogger + /// + /// The filename to log to + /// The locking model to use. + /// The error handler to use. + /// Maximum file size for roll + /// Maximum number of roll backups + /// A configured ILogger + private static ILogger CreateLogger(string filename, FileAppender.LockingModelBase lockModel, IErrorHandler handler, int maxFileSize, int maxSizeRollBackups) + { Repository.Hierarchy.Hierarchy h = (Repository.Hierarchy.Hierarchy)LogManager.CreateRepository("TestRepository"); RollingFileAppender appender = new RollingFileAppender(); @@ -1404,9 +1418,10 @@ appender.AppendToFile = false; appender.CountDirection = 0; appender.RollingStyle = RollingFileAppender.RollingMode.Size; - appender.MaxFileSize = 100000; + appender.MaxFileSize = maxFileSize; appender.Encoding = Encoding.ASCII; appender.ErrorHandler = handler; + appender.MaxSizeRollBackups = maxSizeRollBackups; if (lockModel != null) { appender.LockingModel = lockModel; @@ -1418,7 +1433,7 @@ appender.Layout = layout; appender.ActivateOptions(); - + h.Root.AddAppender(appender); h.Configured = true; @@ -1686,6 +1701,28 @@ AssertFileEquals(filename, "This is a message" + Environment.NewLine + "Test" + Environment.NewLine + "This is a message 2" + Environment.NewLine); Assert.AreEqual("", sh.Message, "Unexpected error message"); } + + /// + /// Verifies that rolling file works + /// + [Test] + public void TestInterProcessLockRoll() + { + String filename = "test.log"; + bool locked; + + SilentErrorHandler sh = new SilentErrorHandler(); + ILogger log = CreateLogger(filename, new FileAppender.InterProcessLock(), sh, 1, 2); + + Assert.DoesNotThrow(delegate { log.Log(GetType(), Level.Info, "A", null); }); + Assert.DoesNotThrow(delegate { log.Log(GetType(), Level.Info, "A", null); }); + + DestroyLogger(); + + AssertFileEquals(filename, "A" + Environment.NewLine); + AssertFileEquals(filename + ".1", "A" + Environment.NewLine); + Assert.IsEmpty(sh.Message); + } #endif ///