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]