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

Ralph Goers reassigned LOG4J2-620:
----------------------------------

    Assignee: Ralph Goers

> Deadlock on reconfiguration with Appenders that use log4j
> ---------------------------------------------------------
>
>                 Key: LOG4J2-620
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-620
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Configurators
>    Affects Versions: 2.0-rc1
>            Reporter: Stefan Wehner
>            Assignee: Ralph Goers
>         Attachments: deadlock.tgz, real_app_trace.txt, sample_app_trace.txt
>
>
> We're using the JDBC appender to log to database and provide connections from 
> a C3P0 pool.
> We're finding deadlocks when reconfiguring the log4j2 configuration under 
> heavy load.
> It seems like C3P0 writes to log4j when getting/returning connections from/to 
> the pool and the application deadlocks.
> I think what happens is: When the appender gets a connection from the pool, 
> the call to log4j from C3P0 notices the configuration change, tries to 
> reconfigure, and waits for all appenders (including itself) to finish...
> To simplify things I've written a small sample application (Maven project) 
> with a custom appender that uses log4j in its append method.
> As you can see the application deadlocks soon (usually on the first 
> reconfiguration)
> You can run it with: 
> {{mvn compile exec:java -Dexec.mainClass=logdeadlock.Test}}
> It should print a few log messages: 
> {code}
> Log: 19:13:54.689 [logdeadlock.Test.main()] ERROR logdeadlock.Test - Test! 0
> Log: 19:13:55.696 [logdeadlock.Test.main()] ERROR logdeadlock.Test - Test! 1
> Log: 19:13:56.703 [logdeadlock.Test.main()] ERROR logdeadlock.Test - Test! 2
> Log: 19:13:57.709 [logdeadlock.Test.main()] ERROR logdeadlock.Test - Test! 3
> Log: 19:13:58.715 [logdeadlock.Test.main()] ERROR logdeadlock.Test - Test! 4
> 2014-04-28 19:13:59,883 DEBUG Reconfiguration started for context 
> java.net.URLClassLoader@2ddf7c93
> ...
> {code}
> And then deadlock after the reconfiguration.
> {code}
> "logdeadlock.Test.main()" prio=10 tid=0x00007fb38883c800 nid=0x2a38 in 
> Object.wait() [0x00007fb37e80b000]
>    java.lang.Thread.State: TIMED_WAITING (on object monitor)
>       at java.lang.Object.wait(Native Method)
>       - waiting on <0x00000007d894be20> (a 
> org.apache.logging.log4j.core.config.LoggerConfig)
>       at 
> org.apache.logging.log4j.core.config.LoggerConfig.waitForCompletion(LoggerConfig.java:382)
>       - locked <0x00000007d894be20> (a 
> org.apache.logging.log4j.core.config.LoggerConfig)
>       at 
> org.apache.logging.log4j.core.config.LoggerConfig.clearAppenders(LoggerConfig.java:225)
>       at 
> org.apache.logging.log4j.core.config.BaseConfiguration.stop(BaseConfiguration.java:228)
>       at 
> org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:346)
>       - locked <0x00000007d74a0840> (a 
> org.apache.logging.log4j.core.LoggerContext)
>       at 
> org.apache.logging.log4j.core.LoggerContext.onChange(LoggerContext.java:423)
>       - locked <0x00000007d74a0840> (a 
> org.apache.logging.log4j.core.LoggerContext)
>       at 
> org.apache.logging.log4j.core.config.FileConfigurationMonitor.checkConfiguration(FileConfigurationMonitor.java:79)
>       - locked <0x00000007d7bca408> (a 
> org.apache.logging.log4j.core.config.FileConfigurationMonitor)
>       at 
> org.apache.logging.log4j.core.Logger$PrivateConfig.filter(Logger.java:318)
>       at org.apache.logging.log4j.core.Logger.isEnabled(Logger.java:132)
>       at 
> org.apache.logging.log4j.spi.AbstractLogger.isEnabled(AbstractLogger.java:1096)
>       at 
> logdeadlock.SomethingThatUsesLogging.doSomething(SomethingThatUsesLogging.java:15)
>       at logdeadlock.MyAppender.append(MyAppender.java:41)
>       at 
> org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:97)
>       at 
> org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:425)
>       at 
> org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:406)
>       at 
> org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:367)
>       at org.apache.logging.log4j.core.Logger.log(Logger.java:112)
>       at 
> org.apache.logging.log4j.spi.AbstractLogger.error(AbstractLogger.java:577)
>       at logdeadlock.Test.main(Test.java:42)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:606)
>       at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:293)
>       at java.lang.Thread.run(Thread.java:744)
> {code}



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

Reply via email to