[jboss-jira] [JBoss JIRA] Updated: (EJBTHREE-1175) ThreadlocalPool does not remove active BeanContext instances from InfinitePool
Galder Zamarreno (JIRA)
jira-events at lists.jboss.org
Fri Jan 11 07:02:19 EST 2008
[ http://jira.jboss.com/jira/browse/EJBTHREE-1175?page=all ]
Galder Zamarreno updated EJBTHREE-1175:
---------------------------------------
Affects Version/s: AS 5.0.0.Beta3
Also affects trunk.
> ThreadlocalPool does not remove active BeanContext instances from InfinitePool
> ------------------------------------------------------------------------------
>
> Key: EJBTHREE-1175
> URL: http://jira.jboss.com/jira/browse/EJBTHREE-1175
> Project: EJB 3.0
> Issue Type: Bug
> Affects Versions: AS 5.0.0.Beta3, AS 4.2.2.GA
> Reporter: Galder Zamarreno
> Assigned To: Carlo de Wolf
> Priority: Critical
>
> I've done a mental walkthrough of StatelessInstanceInterceptor.invoke() and seems
> like there might be a leak:
> 1st ejb3 stateless invocation:
> call StatelessInstanceInterceptor.invoke()
> call pool.get()
> -> start ThreadlocalPool.get()
> // currentBeanContext is null so
> create new BeanContext and add it to InfinitePool.active
> return created BeanContext
> // currentBeanContext is still null upon return
> -> end ThreadlocalPool.get()
> call ejb.invokeNext();
> call pool.release(ctx);
> -> start ThreadlocalPool.release()
> //currentBeanContext is null so
> call currentBeanContext.set(ctx);
> -> end ThreadlocalPool.release()
> end StatelessInstanceInterceptor.invoke()
> // created BeanContext is still in InfinitePool.active
> // currentBeanContext is not null now and contains the ctx created for this invocation
> 2nd ejb3 stateless invocation:
> call StatelessInstanceInterceptor.invoke()
> call pool.get()
> -> start ThreadlocalPool.get()
> // currentBeanContext is not null
> assign currentBeanContext.get to ctx
> set currentBeanContext to null
> return ctx
> // currentBeanContext is null upon return
> -> end ThreadlocalPool.get()
> call ejb.invokeNext();
> call pool.release(ctx);
> -> start ThreadlocalPool.release()
> //currentBeanContext is null so
> call currentBeanContext.set(ctx);
> -> end ThreadlocalPool.release()
> end StatelessInstanceInterceptor.invoke()
> // BeanContext is still in InfinitePool.active
> // currentBeanContext is not null now and contains the ctx created for this invocation
> Looks to me like there's a leak as active contexts are never removed from InfinitePool.active List
> because currentBeanContext is always null when it the call lands on pool.release(ctx).
> Screenshots of the memory analysis can be found in the support case.
--
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