Uploaded image for project: 'Cocoon'
  1. Cocoon
  2. COCOON-2259

Memory leak in PoolableProxyHandler

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.2, 2.3.0
    • 2.3.0
    • * Cocoon Core
    • None
    • Normal
    • Patch available
    • Components: Sitemap - 1.0.0

    Description

      I reproduced the problem with following pipeline and by adding log output to PoolableProxyHandler [1]
      <map:pipeline id="cocoonTest" type="noncaching">
      <map:match pattern="cocoonProtocol">
      <map:generate src="cocoon://sub"/>
      <map:serialize type="xhtml"/>
      </map:match>
      <map:match pattern="sub">
      <map:generate src="welcome/welcome.xml"/>
      <map:transform src="welcome/welcome.xslt"/>
      <map:serialize type="xhtml"/>
      </map:match>
      </map:pipeline>

      Changing the line
           this.attributeName = PoolableProxyHandler.class.getName() + '/' + this.handler.hashCode();
      to
           this.attributeName = PoolableProxyHandler.class.getName() + '/' + this.hashCode();
      fixes the memory leak.

      Why? The PoolableFactoryBean [2] handler is a singleton for every pipeline component, i.e. one instance for noncaching pipeline, one instance for xalan transformer, ... Therefore the attributeName is the same for every component of the same type but Spring requires an unique value for the destruction callback handler.

      In the example sitemap above two noncaching pipeline instances are needed for processing the request. Both call registerDestructionCallback with the same attributeName. Because the attributeName is the same the callback is only called once and the other component remains in ThreadLocal.

      [1] http://svn.apache.org/repos/asf/cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/core/container/spring/avalon/PoolableProxyHandler.java
      [2] http://svn.apache.org/repos/asf/cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/core/container/spring/avalon/PoolableFactoryBean.java

      Attachments

        1. patchForIssue2259.txt
          3 kB
          Alexander Daniel

        Activity

          People

            thorsten Thorsten Scherler
            alexanderdaniel Alexander Daniel
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: