You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@servicemix.apache.org by "Dejan Predovic (JIRA)" <ji...@apache.org> on 2007/04/10 12:31:34 UTC

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

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


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.


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

Posted by "Guillaume Nodet (JIRA)" <ji...@apache.org>.
     [ 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.


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

Posted by "Guillaume Nodet (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/activemq/browse/SM-928?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Guillaume Nodet updated SM-928:
-------------------------------

    Fix Version/s: 3.2
                   3.1.1

> 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
>             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.