[jboss-jira] [JBoss JIRA] Closed: (JBCOMMON-41) ClassLoader leak in BasicThreadPool
Brian Stansberry (JIRA)
jira-events at lists.jboss.org
Thu Mar 27 16:03:40 EDT 2008
[ http://jira.jboss.com/jira/browse/JBCOMMON-41?page=all ]
Brian Stansberry closed JBCOMMON-41.
------------------------------------
Resolution: Done
Added a pluggable ClassLoaderSource property, from which the pool gets a CL to set as TCCL when creating a pool thread or returning one to the pool. To ensure backwards compatibility, if no ClassLoaderSource is injected, the handling of the TCCL is unchanged from previous releases.
> ClassLoader leak in BasicThreadPool
> -----------------------------------
>
> Key: JBCOMMON-41
> URL: http://jira.jboss.com/jira/browse/JBCOMMON-41
> Project: JBoss Common
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Components: common-core
> Affects Versions: 2.2.3.GA
> Reporter: Brian Stansberry
> Assigned To: Brian Stansberry
> Fix For: 2.2.4.GA
>
>
> BasicThreadPool leaks the TCCL of whatever thread is executing when it needs to add threads to the pool. When it's ThreadPoolExecutor needs another thread to handle a task, it calls BasicThreadPool.ThreadPoolThreadFactory.newThread(Runnable) which does this:
> String threadName = BasicThreadPool.this.toString() + "-" + lastThreadNumber.incrementAndGet();
> Thread thread = new Thread(threadGroup, runnable, threadName);
> thread.setDaemon(true);
> return thread;
> The new thread will inherit the TCCL from the old one. Nothing ever clears the TCCL from the pooled thread.
> A couple possible solutions come to mind:
> 1) Set the new thread's TCCL to null in ThreadPoolThreadFactory.newThread()
> 2) Subclass ThreadPoolExecutor, override the afterExecute() method, and set the TCCL to null there. The afterExecute() method is invoked at the completion of each task.
> The latter seems preferable, or perhaps both. A question is whether they should set the TCCL to BasicThreadPool.class.getClassLoader() instead of null. That doesn't sound right though.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list