Author: bodewig
Date: Sat Apr  4 10:21:17 2015
New Revision: 1671260

URL: http://svn.apache.org/r1671260
Log:
small refactoring

Modified:
    logging/log4net/trunk/src/log4net/Appender/AsyncAppender.cs

Modified: logging/log4net/trunk/src/log4net/Appender/AsyncAppender.cs
URL: 
http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net/Appender/AsyncAppender.cs?rev=1671260&r1=1671259&r2=1671260&view=diff
==============================================================================
--- logging/log4net/trunk/src/log4net/Appender/AsyncAppender.cs (original)
+++ logging/log4net/trunk/src/log4net/Appender/AsyncAppender.cs Sat Apr  4 
10:21:17 2015
@@ -158,17 +158,8 @@ namespace log4net.Appender
 
                private void AsyncAppend(object _ignored)
                {
-#if FRAMEWORK_4_0_OR_ABOVE
-                       LoggingEvent[] loggingEvents = null;
-                       lock (lockObject)
-                       {
-                               loggingEvents = events.ToArray();
-                               events.Clear();
-                       }
-                       if (loggingEvents.Length > 0)
-                       {
-                               base.Append(loggingEvents);
-                       }
+#if FRAMEWORK_4_0_OR_ABOVE // ContinueWith already ensures there is only one 
thread executing this method at a time
+                       ForwardEvents();
 #else
                        lock (lockObject)
                        {
@@ -182,17 +173,10 @@ namespace log4net.Appender
                        {
                                while (true)
                                {
-                                       LoggingEvent[] loggingEvents = null;
-                                       lock (lockObject)
-                                       {
-                                               loggingEvents = 
events.ToArray();
-                                               events.Clear();
-                                       }
-                                       if (loggingEvents.Length == 0)
+                                       if (!ForwardEvents())
                                        {
                                                break;
                                        }
-                                       base.Append(loggingEvents);
                                }
                        }
                        finally
@@ -205,6 +189,26 @@ namespace log4net.Appender
 #endif
                }
 
+               /// <summary>
+               ///   Forwards the queued events to the nested appenders.
+               /// </summary>
+               /// <returns>whether there have been any events to 
forward.</returns>
+               private bool ForwardEvents()
+               {
+                       LoggingEvent[] loggingEvents = null;
+                       lock (lockObject)
+                       {
+                               loggingEvents = events.ToArray();
+                               events.Clear();
+                       }
+                       if (loggingEvents.Length == 0)
+                       {
+                               return false;
+                       }
+                       base.Append(loggingEvents);
+                       return true;
+                }
+                                    
                private FixFlags m_fixFlags = FixFlags.All;
                private readonly object lockObject = new object();
                private readonly List<LoggingEvent> events = new 
List<LoggingEvent>();


Reply via email to