[jboss-jira] [JBoss JIRA] Created: (JBAS-5222) ClassLoader leak in BasicThreadPool

Brian Stansberry (JIRA) jira-events at lists.jboss.org
Thu Feb 7 20:28:04 EST 2008


ClassLoader leak in BasicThreadPool
-----------------------------------

                 Key: JBAS-5222
                 URL: http://jira.jboss.com/jira/browse/JBAS-5222
             Project: JBoss Application Server
          Issue Type: Bug
      Security Level: Public (Everyone can see)
          Components: ClassLoading
    Affects Versions:  JBossAS-5.0.0.Beta3
            Reporter: Brian Stansberry
         Assigned To: Brian Stansberry
             Fix For: JBossAS-5.0.0.CR1


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