[
https://issues.apache.org/jira/browse/HTTPCLIENT-1965?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16752553#comment-16752553
]
Oleg Kalnichevski commented on HTTPCLIENT-1965:
-----------------------------------------------
The code you have provided is incorrect. There is no way of knowing whether or
not the response object was returned when the test spits out pool statistics to
the console.
Oleg
> 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.5, 4.5.6
> Reporter: Zoe Wang
> Priority: Major
>
> 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]