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
///