Uploaded image for project: 'OpenJPA'
  1. OpenJPA
  2. OPENJPA-1713

OutOfMemory caused by EntityManagerImpl.push/popFetchPlan processing

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.1.0, 1.2.2, 2.0.0
    • 2.0.1, 2.1.0
    • kernel
    • None

    Description

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

      Attachments

        Activity

          People

            allee8285 Albert Lee
            allee8285 Albert Lee
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: