Withdrawn: 8372198: Avoid closing PlainHttpConnection while holding a lock
Daniel Fuchs
dfuchs at openjdk.org
Thu Nov 20 12:26:23 UTC 2025
On Thu, 20 Nov 2025 10:38:08 GMT, Daniel Fuchs <dfuchs at openjdk.org> wrote:
> An experimental change to SelectorManager::shutdown unveil a potential deadlock between the SelectorManager thread trying to stop the HttpClientImpl, and an executor thread concurrently trying to return a connection to the pool.
>
> The issue seems to be caused by the ConnectionPool::returnToPool trying to close the returned connection when stopping, while holding the ConnectionPool state lock, and the SelectorManager thread trying to close a pooled connection, holding the connection stateLock and trying to close the channel, which caused the CleanupTrigger to fire and attempt to remove the connection from the pool.
>
> This problem was observed once with the java/net/httpclient/ThrowingSubscribersAsLimitingAsync.java test.
>
> To avoid the problem, the proposed fix is to wait until the ConnectionPool::stateLock has been released before actually closing the connection, and to wait until the PlainHttpConnection::stateLock has been released before actually closing the channel. Indeed, there should be no need to close those while holding the lock.
This pull request has been closed without being integrated.
-------------
PR: https://git.openjdk.org/jdk/pull/28421
More information about the security-dev
mailing list