cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Thorsten Scherler (JIRA)" <j...@apache.org>
Subject [jira] [Closed] (COCOON-2259) Memory leak in PoolableProxyHandler
Date Mon, 06 Aug 2012 11:21:02 GMT

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

Thorsten Scherler closed COCOON-2259.
-------------------------------------

    Resolution: Fixed

Committed revision 1369782.
                
> Memory leak in PoolableProxyHandler
> -----------------------------------
>
>                 Key: COCOON-2259
>                 URL: https://issues.apache.org/jira/browse/COCOON-2259
>             Project: Cocoon
>          Issue Type: Bug
>          Components: * Cocoon Core
>    Affects Versions: 2.2, 2.2-dev (Current SVN)
>            Reporter: Alexander Daniel
>            Assignee: Thorsten Scherler
>             Fix For: 2.2-dev (Current SVN)
>
>         Attachments: patchForIssue2259.txt
>
>
> 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

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message