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

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

     [ https://issues.apache.org/jira/browse/OPENJPA-1713?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Albert Lee resolved OPENJPA-1713.
---------------------------------

    Resolution: Fixed

> 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.