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