[ https://issues.apache.org/jira/browse/LOGGING-119?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13583221#comment-13583221 ]
Thomas Neidhart edited comment on LOGGING-119 at 2/21/13 2:32 PM: ------------------------------------------------------------------ commons-logging was created and still targets for JDK 1.1. Map and WeakHashMap did not yet exist at the time, so there was a need for an own implementation of a WeakHashtable. It was decided to keep the compatibility settings as is for the 1.1.2 bugfix release, especially to keep binary compatibility. Changing the internal factories to a Map would break compatibility. What will happen after 1.1.2 is unclear. Either commons-logging will die, or we will modernize it and release a non binary compatible version 2. was (Author: tn): commons-logging was created and still targets for JDK 1.1. Map and WeakHashMap did not yet exist at the time, so there was a need for an own implementation of a WeakHashtable. It was decided to keep the compatibility settings as is for the 1.1.2 bugfix release, especially to keep binary compatibility. Changing the internal factories to a Map would break compatibility. What will happen after 1.1.2 is unclear. Either commons-logging will die, or we will modernize it and release a non-compatible version 2. > deadlock on re-registration of logger > ------------------------------------- > > Key: LOGGING-119 > URL: https://issues.apache.org/jira/browse/LOGGING-119 > Project: Commons Logging > Issue Type: Bug > Affects Versions: 1.1.1 > Environment: Java 1.5, Windows > Reporter: Nitzan Niv > Fix For: 1.1.2 > > Attachments: BugDeadlock.java, Patch-WeakHashtable-1.1.1.txt > > > Reached a deadlock inside common-logging while concurrently re-deploying 2 > WARs. > In each WAR there is an attempt to get a logger: > private final Log logger = LogFactory.getLog(ContextLoader.class); > Thread dump: > [deadlocked thread] Thread-96: > ----------------------------- > Thread 'Thread-96' is waiting to acquire lock > 'java.lang.ref.ReferenceQueue@5266e0' that is held by thread 'Thread-102' > Stack trace: > ------------ > > org.apache.commons.logging.impl.WeakHashtable.purge(WeakHashtable.java:323) > > org.apache.commons.logging.impl.WeakHashtable.rehash(WeakHashtable.java:312) > java.util.Hashtable.put(Hashtable.java:414) > > org.apache.commons.logging.impl.WeakHashtable.put(WeakHashtable.java:242) > > org.apache.commons.logging.LogFactory.cacheFactory(LogFactory.java:1004) > org.apache.commons.logging.LogFactory.getFactory(LogFactory.java:657) > org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685) > > org.springframework.web.context.ContextLoader.<init>(ContextLoader.java:145) > > [deadlocked thread] Thread-102: > ------------------------------ > Thread 'Thread-102' is waiting to acquire lock > 'org.apache.commons.logging.impl. > WeakHashtable@1e02138' that is held by thread 'Thread-96' > Stack trace: > ------------ > java.util.Hashtable.remove(Hashtable.java:437) > > org.apache.commons.logging.impl.WeakHashtable.purgeOne(WeakHashtable.java:338) > > org.apache.commons.logging.impl.WeakHashtable.put(WeakHashtable.java:238) > > org.apache.commons.logging.LogFactory.cacheFactory(LogFactory.java:1004) > org.apache.commons.logging.LogFactory.getFactory(LogFactory.java:657) > org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685) > > org.springframework.web.context.ContextLoader.<init>(ContextLoader.java:145) -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira