[ https://issues.apache.org/jira/browse/HTTPCORE-567?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Oleg Kalnichevski moved HTTPCLIENT-1965 to HTTPCORE-567: -------------------------------------------------------- Affects Version/s: (was: 4.5.6) (was: 4.5.5) 4.4.11 Workflow: classic default workflow (was: Default workflow, editable Closed status) Key: HTTPCORE-567 (was: HTTPCLIENT-1965) Project: HttpComponents HttpCore (was: HttpComponents HttpClient) > Connection leak when aborting httpRequest after connection leasing > ------------------------------------------------------------------ > > Key: HTTPCORE-567 > URL: https://issues.apache.org/jira/browse/HTTPCORE-567 > Project: HttpComponents HttpCore > Issue Type: Bug > Affects Versions: 4.4.11 > 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: dev-unsubscr...@hc.apache.org For additional commands, e-mail: dev-h...@hc.apache.org