[ https://issues.apache.org/jira/browse/LOG4J2-702?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14054012#comment-14054012 ]
Sean Bridges commented on LOG4J2-702: ------------------------------------- I think the bookeeping needs to be done outside the LoggerConfig class. Say you used loggerConfig something like, {code} class LoggerConfig { /** * returns true if the reference count was incremented */ public boolean addRef()... public void decRef() ... } class SomeClassUsingLoggerConfig { volatile LoggerConfig loggerConfig; ... while(true) { LoggerConfig local = loggerConfig; if(local.addRef()) { try { //use local break; } finally { local.decRef(); } else { //sleep? some sort of exponential backoff } } } } {code} > LoggerConfig#waitForCompletion is not thread safe > ------------------------------------------------- > > Key: LOG4J2-702 > URL: https://issues.apache.org/jira/browse/LOG4J2-702 > Project: Log4j 2 > Issue Type: Bug > Components: Core > Affects Versions: 2.0-rc2 > Reporter: Sean Bridges > Assignee: Matt Sicker > Priority: Critical > Fix For: 2.0 > > > This is in trunk, svn commit 1608156 > LoggerConfig#waitForCompletion uses an AtomicInteger counter to try to detect > if there are any calls currently executing the log(Event) method, but it does > not do so in a thread safe manner. Consider two threads A and B, where > Thread A is calling clearAppenders(), and Thread B is calling log(Event), > {code} > Thread A loggerConfig.clearAppenders() > Thread A loggerConfig.waitForCompletion() > Thread A counter.get() //returns 0 > Thread A //loggerConfig.waitForCompletion() returns > Thread B loggerConfig.log(Event) > Thread B counter.increment() > Thread A proceeds assuming no log calls are onging, but thread B is in the > log method > {code} > I'm not sure what the requirements are, but if the requirement is to not lose > logging events, I think you need some sort of synchronization outside of the > LoggerConfig object. -- This message was sent by Atlassian JIRA (v6.2#6252) --------------------------------------------------------------------- To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org For additional commands, e-mail: log4j-dev-h...@logging.apache.org