[ 
https://issues.apache.org/jira/browse/LOG4NET-447?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Gregory Babski updated LOG4NET-447:
-----------------------------------
    Attachment: MemoryAppender_ThreadSafety.diff

Added patch file that fixes the issue.

The patch deprecates the Get and Clear methods. To retrieve and clear the event 
list use PopAllEvents. This performs the same logical operations internally, 
but does so while holding a lock on the event list's syncroot object.

> MemoryAppender class is not thread safe
> ---------------------------------------
>
>                 Key: LOG4NET-447
>                 URL: https://issues.apache.org/jira/browse/LOG4NET-447
>             Project: Log4net
>          Issue Type: Bug
>          Components: Appenders
>    Affects Versions: 1.2.13
>         Environment: .NET Framework 4.0 (Full Profile)
>            Reporter: Gregory Babski
>            Priority: Minor
>         Attachments: MemoryAppenderTest.cs, MemoryAppender_ThreadSafety.diff
>
>
> The memory appender cannot be used safely in an application that uses more 
> than one thread to interact with logging.
> When using this code to retrieve and then clear events logged in the memory 
> appender:
> var events = memoryAppender.GetEvents();
> memoryAppender.Clear();
> The executing thread may be preempted between these two calls and additional 
> logging events logged. These events are then cleared when the thread resumes 
> execution - and are never seen/processed.
> I expect to be be able to retrieve and clear the list of current events in 
> one call that guarantees that no events are ever lost.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to