Zoe Wang created HTTPCLIENT-1965:
------------------------------------

             Summary: Connection leak when aborting httpRequest after 
connection leasing
                 Key: HTTPCLIENT-1965
                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1965
             Project: HttpComponents HttpClient
          Issue Type: Bug
    Affects Versions: 4.5.6, 4.5.5
            Reporter: Zoe Wang


This is a follow up on https://issues.apache.org/jira/browse/HTTPCLIENT-1958. 

The leaking thread interrupt flag is fixed but we noticed that there's an edge 
case when a request gets aborted right after a new connection is leased, that 
connection will never get re-used and closed. 

 

>From the [source 
>code|https://github.com/apache/httpcomponents-client/blob/4.5.x/httpclient/src/main/java/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.java#L305],
> looks like the edge case that needs to be handled is "if (entry != null && 
>future.isCancelled())"

Code to reproduce:
{code:java}
ScheduledExecutorService scheduledExecutorService =           
Executors.newScheduledThreadPool(1);
PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new 
PoolingHttpClientConnectionManager();

CloseableHttpClient httpclient = 
HttpClients.custom().setConnectionManager(poolingHttpClientConnectionManager).build();

try {
HttpGet httpGet = new HttpGet("http://somehost";);
scheduledExecutorService.schedule(httpGet::abort, 40, TimeUnit.MILLISECONDS);
CloseableHttpResponse response = httpclient.execute(httpGet);

HttpEntity entity = response.getEntity();
EntityUtils.consume(entity);
} catch (Exception e) {
    e.printStackTrace();
} finally {
scheduledExecutorService.shutdown();
}

System.out.println(poolingHttpClientConnectionManager.getTotalStats());
{code}
The printed out log was: [leased: 1; pending: 0; available: 0; max: 20]

Note that you might need to change the abort time to reproduce the issue.

 

 

 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to