
[ http://jira.qos.ch/browse/LBCORE-224?page=com.atlassian.jira.plugin.system.i... ] Joern Huxhorn commented on LBCORE-224: -------------------------------------- Setting/changing the thread-name is possible even after the Thread has been started. But doing so does not have any obvious influence on the locking. it simply changes a char[] and performs an additional native call on OS X. The locking does only depend on the Thread ID - which is only written to in init(..) (called in c'tors) and clone(). protected final boolean tryReleaseShared(int unused) { HoldCounter rh = cachedHoldCounter; Thread current = Thread.currentThread(); if (rh == null || rh.tid != current.getId()) rh = readHolds.get(); if (rh.tryDecrement() <= 0) throw new IllegalMonitorStateException(); for (;;) { int c = getState(); int nextc = c - SHARED_UNIT; if (compareAndSetState(c, nextc)) return nextc == 0; } } The only chance for failure in the above code is a duplicate or mutable thread id. oO tryDecrement() is also trivial. The only place throwing a IllegalMonitorStateException is really inside of that "if". This whole problem is extremely strange... (The above code is 1.6.0_26 on Mac)
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