[logback-dev] [JIRA] Commented: (LBCORE-224) java.lang.IllegalMonitorStateException at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:68)
Joern Huxhorn (JIRA)
noreply-jira at qos.ch
Tue Sep 27 16:54:16 CEST 2011
[ http://jira.qos.ch/browse/LBCORE-224?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12148#action_12148 ]
Joern Huxhorn commented on LBCORE-224:
--------------------------------------
Just checked the code and wasn't able to find anything suspicious, either.
There are some small enhancements you could implement:
public Appender<E> getAppender(String name) {
if (name == null) {
return null;
}
r.lock();
try {
for (Appender<E> appender : appenderList) {
if (name.equals(appender.getName())) {
return appender;
}
}
} finally {
r.unlock();
}
return null;
}
/**
* Returns <code>true</code> if the specified appender is in the list of
* attached appenders, <code>false</code> otherwise.
*
* @since 1.2
*/
public boolean isAttached(Appender<E> appender) {
if (appender == null) {
return false;
}
r.lock();
try {
for (Appender<E> a : appenderList) {
if (a == appender) {
return true;
}
}
} finally {
r.unlock();
}
return false;
}
The "finally" will be executed automatically before the "return".
That said, I don't understand how the IllegalMonitorStateException can occur.
> java.lang.IllegalMonitorStateException at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:68)
> ----------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: LBCORE-224
> URL: http://jira.qos.ch/browse/LBCORE-224
> Project: logback-core
> Issue Type: Bug
> Components: Appender
> Affects Versions: 0.9.30
> Environment: W7 64 bits, JRE 6u26 64 bits.
> Reporter: César Álvarez Núñez
> Assignee: Logback dev list
>
> I'm trying (unsuccessfully for the time being) to create a test case that will reproduce it.
> It happens randomly with 0.9.30 when running a regression testing with TestNG + Zookeeper + Own code.
> Apparently it does not happen with 0.9.29.
> java.lang.IllegalMonitorStateException
> at java.util.concurrent.locks.ReentrantReadWriteLock$Sync.tryReleaseShared(Unknown Source)
> at java.util.concurrent.locks.AbstractQueuedSynchronizer.releaseShared(Unknown Source)
> at java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.unlock(Unknown Source)
> at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:68)
> at ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:285)
> at ch.qos.logback.classic.Logger.callAppenders(Logger.java:272)
> at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:473)
> at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:427)
> at ch.qos.logback.classic.Logger.info(Logger.java:631)
> at org.apache.zookeeper.server.ZooKeeperServer.shutdown(ZooKeeperServer.java:420)
> at org.apache.zookeeper.server.quorum.Leader.shutdown(Leader.java:443)
> at org.apache.zookeeper.server.quorum.QuorumPeer.shutdown(QuorumPeer.java:766)
> at org.apache.zookeeper.test.QuorumUtil.shutdown(QuorumUtil.java:224)
> at org.apache.zookeeper.test.QuorumUtil.shutdownAll(QuorumUtil.java:211)
> at org.apache.zookeeper.test.QuorumUtil.tearDown(QuorumUtil.java:255)
> at eswf.zk2.agents.ZkEphemeralInfoPublisherTest.tearDown(ZkEphemeralInfoPublisherTest.java:55)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> at java.lang.reflect.Method.invoke(Unknown Source)
> at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
> at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:543)
> at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:212)
> at org.testng.internal.Invoker.invokeMethod(Invoker.java:772)
> at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
> at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
> at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
> at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
> at org.testng.TestRunner.privateRun(TestRunner.java:753)
> at org.testng.TestRunner.run(TestRunner.java:613)
> at org.testng.SuiteRunner.runTest(SuiteRunner.java:335)
> at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:330)
> at org.testng.SuiteRunner.privateRun(SuiteRunner.java:292)
> at org.testng.SuiteRunner.run(SuiteRunner.java:241)
> at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
> at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
> at org.testng.TestNG.runSuitesSequentially(TestNG.java:1169)
> at org.testng.TestNG.runSuitesLocally(TestNG.java:1094)
> at org.testng.TestNG.run(TestNG.java:1006)
> at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:107)
> at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:199)
> at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:170)
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the logback-dev
mailing list