[
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