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: 2.0.0, 1.2.2, 1.1.0
            Reporter: Albert Lee
            Assignee: Albert Lee
             Fix For: 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.

Reply via email to