commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Thomas Neidhart (JIRA)" <j...@apache.org>
Subject [jira] [Resolved] (LOGGING-119) deadlock on re-registration of logger
Date Fri, 18 Jan 2013 10:56:15 GMT

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

Thomas Neidhart resolved LOGGING-119.
-------------------------------------

       Resolution: Fixed
    Fix Version/s: 1.1.2

Applied a modified patch in r1435077.

The following changes have been made:

 * synchronize the put and remove methods to prevent issues with changeCount and the actual
bug wrt purge / purgeOne. The call to super.put() will be synchronized anyway, so there should
be no performance hit. This already solves the bug.
 * apply the idea from the patch to the purge method, as it is also used in non-synchronized
methods like values(), elements(). These methods are not actually used in commons-logging,
but this has been added to prevent any future problems in case this changes. The method purgeOne
has been kept as is, as it is only used in the now synchronized put and remove methods.
                
> 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

Mime
View raw message