[
https://issues.apache.org/jira/browse/HTTPCLIENT-2389?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18015778#comment-18015778
]
Arturo Bernal commented on HTTPCLIENT-2389:
-------------------------------------------
[~gjasinski] Please attach a minimal self-contained reproducer + exact
httpclient5/httpcore5 versions and DEBUG logs.
> 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
> Priority: Major
> 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]