openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Albert Lee (JIRA)" <j...@apache.org>
Subject [jira] Created: (OPENJPA-1713) OutOfMemory caused by EntityManagerImpl.push/popFetchPlan processing
Date Wed, 30 Jun 2010 15:29:49 GMT
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.


Mime
View raw message