cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alexander Daniel (JIRA)" <>
Subject [jira] Created: (COCOON-2259) Memory leak in PoolableProxyHandler
Date Fri, 03 Jul 2009 15:00:47 GMT
Memory leak in PoolableProxyHandler

                 Key: COCOON-2259
             Project: Cocoon
          Issue Type: Bug
          Components: * Cocoon Core
    Affects Versions: 2.2, 2.2-dev (Current SVN)
            Reporter: Alexander Daniel

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

Changing the line 
     this.attributeName = PoolableProxyHandler.class.getName() + '/' + this.handler.hashCode();
     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.


This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message