Integrated: 8338569: HTTP/1.1 CleanupTrigger may be triggerred after the next exchange started
Daniel Fuchs
dfuchs at openjdk.org
Thu Aug 29 08:56:24 UTC 2024
On Mon, 19 Aug 2024 09:36:54 GMT, Daniel Fuchs <dfuchs at openjdk.org> wrote:
> The java/net/httpclient/DigestEchoClient.java fails intemittently with IOException: HTTP/1.1 header parser received no bytes.
>
> Analysis shows that this is caused by the CleanupTrigger which receives data after the reused connection has been taken out of the HTTP/1.1 clear pool. This should not happen.
>
> The issue is caused by deferred registration of read subscribers with the SocketTube. The subscribers are registered within the SelectorManager thread to ensure proper interaction with the read method.
>
> Sometimes pending subscribers are pushed faster than they are actually subscribed, which may cause the wrong subscriber to be subscribed at the wrong time.
>
> This is a redo of [JDK-8336655](https://bugs.openjdk.org/browse/JDK-8336655) which was a failed fix.
> The main difference is that the new fix uses a ConcurrentLinkedQueue to make sure all subscribers get subscribed and dropped in the right sequence. Marking previous subscription as stopped ensures that data can only be routed to the last subscriber in the queue.
This pull request has now been integrated.
Changeset: 723588a4
Author: Daniel Fuchs <dfuchs at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/723588a4e78d25f0ef3c4cdaeb377aedc3a352d4
Stats: 183 lines in 6 files changed: 119 ins; 16 del; 48 mod
8338569: HTTP/1.1 CleanupTrigger may be triggerred after the next exchange started
Reviewed-by: jpai
-------------
PR: https://git.openjdk.org/jdk/pull/20623
More information about the net-dev
mailing list