[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