[
https://issues.apache.org/jira/browse/HTTPCORE-315?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13468265#comment-13468265
]
Scott Stanton commented on HTTPCORE-315:
----------------------------------------
I have attached a possible fix for this issue. Splitting the
RouteSpecificPool.completed() call into createEntry() and completed() allows
the requestCompleted() method to add the entry to the global leased list before
calling completed().
> HttpAsyncRequester leaks a connection if a request is cancelled before the
> connection is established
> ----------------------------------------------------------------------------------------------------
>
> Key: HTTPCORE-315
> URL: https://issues.apache.org/jira/browse/HTTPCORE-315
> Project: HttpComponents HttpCore
> Issue Type: Bug
> Components: HttpCore NIO
> Affects Versions: 4.2.2
> Reporter: Scott Stanton
> Attachments: HTTPCORE-315.patch
>
>
> When using HttpAsyncRequester in combination with a BasicNIOConnPool, if the
> future returned from execute() is cancelled before the connection is
> established, then the connection will be leaked after it connects (added to
> the leased list after the cancelled() callbacks are invoked). The sequence
> that leads to this is:
> * AbstractNIOConnPool.requestCompleted() calls RouteSpecificPool.completed()
> which ultimately calls HttpAsyncRequester.completed()
> * HttpAsyncRequester.completed() detects that the requestFuture is done, so
> it attempts to release the pool entry
> * The pool entry hasn't been added to the leased list yet, so the release has
> no effect and the connection is not added to the available list
> * After the completed callback returns to requestCompleted(), the connection
> is added to the leased list.
> At this point, no thread is expecting to do anything further with the
> connection, so it is effectively lost and consuming a pool slot.
> I think the correct remedy is to ensure that the connection is added to the
> global leased list as well as the route specific leased list before the
> completed() callback is invoked. This should ensure that the connection is
> properly cleaned up.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]