Grzegorz Jasiński created HTTPCLIENT-2389:
---------------------------------------------
Summary: Connection is not released after receiving "execution
cancelled"
Key: HTTPCLIENT-2389
URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2389
Project: HttpComponents HttpClient
Issue Type: Bug
Components: HttpClient (async)
Affects Versions: 5.4.1
Reporter: Grzegorz Jasiński
Attachments: leak.log
Hello,
I am working with httpclient async. I had encountered resource leak caused by
race condition.
The execution of request was cancelled in the very end of call.
{code:java}
20250812
05:23:21.072|pool-14-thread-1|DEBUG|org.apache.hc.client5.http.impl.async.HttpAsyncMainClientExec|
ex-0105065338: execution cancelled{code}
This caused calling InternalHttpAsyncExecRuntime method:
markConnectionNonReusable.
This method had set validDuration = null. This was done by thread
pool-14-thread-1
In the same time "successful" path tried to release resource, it was done in
PoolingAsyncClientConnectionManager release method. In this method there was
verification of validDuration to not be null. Because other thread changed it
to null, this check failed to release resource which is causing memory leak.
This was done by thread: httpclient-dispatch-3
{code:java}
20250812
05:23:21.072|httpclient-dispatch-3|DEBUG|org.apache.hc.client5.http.impl.async.InternalAbstractHttpAsyncClient|
ex-0105065338 message exchange successful
20250812
05:23:21.072|httpclient-dispatch-3|DEBUG|org.apache.hc.client5.http.impl.async.InternalHttpAsyncClient|
ep-0105065112 releasing valid endpoint
20250812
05:23:21.072|httpclient-dispatch-3|DEBUG|org.apache.hc.client5.http.impl.async.HttpAsyncMainClientExec|
ex-0105065338: execution failed: Keep-alive time
{code}
stack trace for thread pool-14-thread-1:
LoggingAsyncClientExchangeHandler cancel() line 181
HttpAsyncMainClientExec --> AsyncClientExchangeHandler cancel() line 140
HttpAsyncMainClientExec --> AsyncClientExchangeHandler cancel() line 130
InternalHttpAsyncExecRuntime markConnectionNonReusable() line 337 <-
*problematic line - set null*
stack trace for httpclient-dispatch-3
InternalAbstractHttpAsyncClient -->AsyncExecCallback completed() line 336
InternalHttpAsyncExecRuntime releaseEndpoint() line 160 <-- in here
*validDuration is null*
PoolingAsyncClientConnectionManager release() line 389 <- in here
*validDuration is verified if it is null, this is causing exception and is not
releasing resource*
Full logs:
leak.log (attachment)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]