You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Daniel Kulp (Resolved) (JIRA)" <ji...@apache.org> on 2012/03/02 22:13:56 UTC
[jira] [Resolved] (CXF-4131)
org.apache.cxf.transport.http.finalizeConfig() duplicate property listener
and possible memory leak
[ https://issues.apache.org/jira/browse/CXF-4131?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Kulp resolved CXF-4131.
------------------------------
Resolution: Fixed
Fix Version/s: (was: NeedMoreInfo)
2.5.3
2.4.7
Assignee: Daniel Kulp
> org.apache.cxf.transport.http.finalizeConfig() duplicate property listener and possible memory leak
> ----------------------------------------------------------------------------------------------------
>
> Key: CXF-4131
> URL: https://issues.apache.org/jira/browse/CXF-4131
> Project: CXF
> Issue Type: Bug
> Components: Transports
> Affects Versions: 2.4.6, 2.5.2
> Reporter: Louis-Rene Poirier Beauchemin
> Assignee: Daniel Kulp
> Fix For: 2.4.7, 2.5.3
>
>
> org.apache.cxf.transport.http.finalizeConfig() calling two times client.addPropertyChangeListener(this) resulting in duplicated PropertyChangeListener entry in the HTTPClientPolicy.propertyListener field.
> First instance added is here:
> {noformat} Thread [main] (Suspended (breakpoint at line 859 in org.apache.cxf.transport.http.HTTPConduit))
> org.apache.cxf.transport.http.HTTPConduit.setClient(org.apache.cxf.transports.http.configuration.HTTPClientPolicy) line: 859
> org.apache.cxf.transport.http.HTTPConduit.configureConduitFromEndpointInfo(org.apache.cxf.transport.http.HTTPConduit, org.apache.cxf.service.model.EndpointInfo) line: 334
> org.apache.cxf.transport.http.HTTPConduit.finalizeConfig() line: 413
> org.apache.cxf.transport.http.HTTPTransportFactory.getConduit(org.apache.cxf.service.model.EndpointInfo, org.apache.cxf.ws.addressing.EndpointReferenceType) line: 253
> {noformat}
> The second one is here:
> {noformat}
> Thread [main] (Suspended)
> org.apache.cxf.transport.http.HTTPConduit.finalizeConfig() line: 421
> org.apache.cxf.transport.http.HTTPTransportFactory.getConduit(org.apache.cxf.service.model.EndpointInfo, org.apache.cxf.ws.addressing.EndpointReferenceType) line: 253
> {noformat}
> This problem seem to had been introduced when we upgraded to version 2.5.2 from version 2.3.2
> Because we implemented a custom ConduitSelector and reuse the Conduit instance, this generated a memory leak from HTTPClientPolicy.propertyListener.
> The work around we currently use to clean the extra instances is by reflection.
> We use reflection to know how much duplicate instances there is in HTTPClientPolicy.propertyListener because there is no public api to access the array.
> We then call HTTPClientPolicy.removePropertyChangeListener(listener) multiple time with the same instance to remove all of them as in the following snipplet from our implementation of ConduitSelector.complete() :
> {noformat}
> PropertyChangeListener listener = (PropertyChangeListener) selectedConduit;
> List<HTTPClientPolicy> policies =
> pExchange.getEndpoint().getEndpointInfo().getExtensors(
> HTTPClientPolicy.class);
> for (HTTPClientPolicy policy : policies)
> {
> long nbListener = CxfReflectionInstrospectorUtil.getListenerNb(policy, listener);
> while (nbListener > 0)
> {
> policy.removePropertyChangeListener(listener);
> --nbListener;
> }
> }
> {noformat}
> regards and many thanks for your efforts,
> Louis-Rene Poirier Beauchemin.
--
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