[jboss-jira] [JBoss JIRA] (JGRP-1655) ThreadLocal leaks discovered after enabling Tomcat 7 ThreadLocal detection listener

Manuel Dominguez Sarmiento (JIRA) jira-events at lists.jboss.org
Sun Jul 14 20:21:26 EDT 2013


    [ https://issues.jboss.org/browse/JGRP-1655?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12789539#comment-12789539 ] 

Manuel Dominguez Sarmiento commented on JGRP-1655:
--------------------------------------------------

Looking at FlowControl.java, I see that the ignore_thread ThreadLocal is used in the following methods:

- up(Event) -> correct usage, ThreadLocal is removed in finally block
- up(MessageBatch) -> correct usage, ThreadLocal is removed in finally block
- down(Event) -> incorrect usage, since ignore_thread.get() invokes initialValue() which stores the ThreadLocal value, however there is no guarantee that ThreadLocal.remove() will be invoked on this same thread.
- stop() -> ineffective usage, since ThreadLocal.remove() will only remove the ThreadLocal value for the shutdown thread that invoked this method. However, because of down() above, many other threads may have a value for the ThreadLocal.

This causes memory leaks on shutdown, since the ignore_thread ThreadLocal is a local subclass of ThreadLocal, which causes a ClassLoader reference for the webapp to be held after shutdown, because down() does not properly clean up after itself and ThreadLocals remain.
                
> ThreadLocal leaks discovered after enabling Tomcat 7 ThreadLocal detection listener
> -----------------------------------------------------------------------------------
>
>                 Key: JGRP-1655
>                 URL: https://issues.jboss.org/browse/JGRP-1655
>             Project: JGroups
>          Issue Type: Bug
>    Affects Versions: 3.3.2
>            Reporter: Manuel Dominguez Sarmiento
>            Assignee: Bela Ban
>             Fix For: 3.4
>
>
> After enabling Tomcat 7's org.apache.catalina.core.ThreadLocalLeakPreventionListener, we found this while undeploying our webapp:
> Jul 12, 2013 11:19:04 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
> SEVERE: The web application [/cms] created a ThreadLocal with key of type [org.jgroups.protocols.FlowControl$1] (value [org.jgroups.protocols.FlowControl$1 at 536c4bc7]) and a value of type [java.lang.Boolean] (value [false]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
> Jul 12, 2013 11:19:04 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
> SEVERE: The web application [/cms] created a ThreadLocal with key of type [org.jgroups.protocols.FlowControl$1] (value [org.jgroups.protocols.FlowControl$1 at 536c4bc7]) and a value of type [java.lang.Boolean] (value [false]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
> Jul 12, 2013 11:19:04 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
> SEVERE: The web application [/cms] created a ThreadLocal with key of type [org.jgroups.protocols.FlowControl$1] (value [org.jgroups.protocols.FlowControl$1 at 536c4bc7]) and a value of type [java.lang.Boolean] (value [false]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
> Jul 12, 2013 11:19:04 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
> SEVERE: The web application [/cms] created a ThreadLocal with key of type [org.jgroups.protocols.FlowControl$1] (value [org.jgroups.protocols.FlowControl$1 at 536c4bc7]) and a value of type [java.lang.Boolean] (value [false]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
> Jul 12, 2013 11:19:04 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
> SEVERE: The web application [/cms] created a ThreadLocal with key of type [org.jgroups.protocols.FlowControl$1] (value [org.jgroups.protocols.FlowControl$1 at 536c4bc7]) and a value of type [java.lang.Boolean] (value [false]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
> Jul 12, 2013 11:19:04 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
> SEVERE: The web application [/cms] created a ThreadLocal with key of type [org.jgroups.protocols.FlowControl$1] (value [org.jgroups.protocols.FlowControl$1 at 536c4bc7]) and a value of type [java.lang.Boolean] (value [false]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
> Jul 12, 2013 11:19:04 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
> SEVERE: The web application [/cms] created a ThreadLocal with key of type [org.jgroups.protocols.FlowControl$1] (value [org.jgroups.protocols.FlowControl$1 at 536c4bc7]) and a value of type [java.lang.Boolean] (value [false]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
> Jul 12, 2013 11:19:04 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
> SEVERE: The web application [/cms] created a ThreadLocal with key of type [org.jgroups.protocols.FlowControl$1] (value [org.jgroups.protocols.FlowControl$1 at 536c4bc7]) and a value of type [java.lang.Boolean] (value [false]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
> Jul 12, 2013 11:19:04 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
> SEVERE: The web application [/cms] created a ThreadLocal with key of type [org.jgroups.protocols.FlowControl$1] (value [org.jgroups.protocols.FlowControl$1 at 536c4bc7]) and a value of type [java.lang.Boolean] (value [false]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
> Jul 12, 2013 11:19:04 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
> SEVERE: The web application [/cms] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal at 6ae3209a]) and a value of type [org.jgroups.protocols.TP.ProtocolAdapter] (value [locks (21)]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
> Jul 12, 2013 11:19:04 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
> SEVERE: The web application [/cms] created a ThreadLocal with key of type [org.jgroups.protocols.FlowControl$1] (value [org.jgroups.protocols.FlowControl$1 at 536c4bc7]) and a value of type [java.lang.Boolean] (value [false]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
> Jul 12, 2013 11:19:04 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
> SEVERE: The web application [/cms] created a ThreadLocal with key of type [org.jgroups.protocols.FlowControl$1] (value [org.jgroups.protocols.FlowControl$1 at 536c4bc7]) and a value of type [java.lang.Boolean] (value [false]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
> Jul 12, 2013 11:19:04 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
> SEVERE: The web application [/cms] created a ThreadLocal with key of type [org.jgroups.protocols.FlowControl$1] (value [org.jgroups.protocols.FlowControl$1 at 536c4bc7]) and a value of type [java.lang.Boolean] (value [false]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
> Jul 12, 2013 11:19:04 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
> SEVERE: The web application [/cms] created a ThreadLocal with key of type [org.jgroups.protocols.FlowControl$1] (value [org.jgroups.protocols.FlowControl$1 at 536c4bc7]) and a value of type [java.lang.Boolean] (value [false]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
> Jul 12, 2013 11:19:04 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks

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


More information about the jboss-jira mailing list