You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@servicemix.apache.org by "Guillaume Nodet (JIRA)" <ji...@apache.org> on 2007/05/02 15:11:34 UTC

[jira] Resolved: (SM-928) ProviderProcessor leaks memory for https endpoints

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

Guillaume Nodet resolved SM-928.
--------------------------------

    Resolution: Fixed
      Assignee: Guillaume Nodet

URL: http://svn.apache.org/viewvc?view=rev&rev=534443
URL: http://svn.apache.org/viewvc?view=rev&rev=534447



> ProviderProcessor leaks memory for https endpoints
> --------------------------------------------------
>
>                 Key: SM-928
>                 URL: https://issues.apache.org/activemq/browse/SM-928
>             Project: ServiceMix
>          Issue Type: Bug
>          Components: servicemix-http
>    Affects Versions: 3.1
>            Reporter: Dejan Predovic
>         Assigned To: Guillaume Nodet
>             Fix For: 3.1.1, 3.2
>
>
> ProviderProcessor creates a new CommonsHttpSSLSocketFactory/Protocol instance for each message. These instances are in turn used as a part of HttpHost equals/hashCode identity. HttpHost instances are internally cached by MultiThreadedHttpConnectionManager and having new CommonsHttpSSLSocketFactory creates a new cache instance for every call.
> Making Protocol an instance variable and changing:
> {code}
>    if (uri.getScheme().equals("https")) {
>             ProtocolSocketFactory sf = new CommonsHttpSSLSocketFactory(
>                             endpoint.getSsl(),
>                             endpoint.getKeystoreManager());
>             Protocol protocol = new Protocol("https", sf, 443);
>             HttpHost httphost = new HttpHost(uri.getHost(), uri.getPort(), protocol);
>             host = new HostConfiguration();
>             host.setHost(httphost);
>         } else {
> {code}
> to:
> {code}        
>         if (uri.getScheme().equals("https")) {
>             synchronized (this) {
>                 if (protocol == null) {
>                     ProtocolSocketFactory sf = new CommonsHttpSSLSocketFactory(
>                             endpoint.getSsl(),
>                             endpoint.getKeystoreManager());
>                     protocol = new Protocol("https", sf, 443);
>                 }
>             }
>             HttpHost httphost = new HttpHost(uri.getHost(), uri.getPort(), protocol);
>             host = new HostConfiguration();
>             host.setHost(httphost);
>         } else {
> {code}
> seems to work.

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