You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Donald Woods (JIRA)" <ji...@apache.org> on 2010/08/09 22:59:16 UTC

[jira] Commented: (OPENJPA-1713) OutOfMemory caused by EntityManagerImpl.push/popFetchPlan processing

    [ https://issues.apache.org/jira/browse/OPENJPA-1713?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12896691#action_12896691 ] 

Donald Woods commented on OPENJPA-1713:
---------------------------------------

Is this ready to mark as resolved for 2.0.1 and trunk?  No activity since July 7th.....

> OutOfMemory caused by EntityManagerImpl.push/popFetchPlan processing
> --------------------------------------------------------------------
>
>                 Key: OPENJPA-1713
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1713
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 1.1.0, 1.2.2, 2.0.0
>            Reporter: Albert Lee
>            Assignee: Albert Lee
>             Fix For: 2.0.1, 2.1.0
>
>
> There is a leak in memory in the EntityManagerImpl push/popFetchPlan processing where fetch plan associated with the current fetch configuration is add to the _plans IdentityHashMap but never remove from it. 
>     private Map<FetchConfiguration,FetchPlan> _plans = new IdentityHashMap<FetchConfiguration,FetchPlan>(1);
>     public FetchPlan getFetchPlan() {
>         assertNotCloseInvoked();
>         _broker.lock();
>         try {
>             FetchConfiguration fc = _broker.getFetchConfiguration();
>             FetchPlan fp = _plans.get(fc);
>             if (fp == null) {
>                 fp = _emf.toFetchPlan(_broker, fc);
>                 _plans.put(fc, fp);                         <<< added to _plans
>             }
>             return fp;
>         } finally {
>             _broker.unlock();
>         }
>     }
>     public FetchPlan pushFetchPlan() {
>         assertNotCloseInvoked();
>         _broker.lock();
>         try {
>             _broker.pushFetchConfiguration();
>             return getFetchPlan();
>         } finally {
>             _broker.unlock();
>         }
>     }
>     public void popFetchPlan() {
>         assertNotCloseInvoked();
>         _broker.lock();
>         try {
>             _broker.popFetchConfiguration();      <<< but never remove when the fetch plan is popped.
>         } finally {
>             _broker.unlock();
>         }
>     }
> The only time _plans is cleaned up are during clear() or closed().

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.