On Tue, 13 Aug 2024 18:02:37 GMT, Daniel Fuchs <dfu...@openjdk.org> wrote:
> Please find here a fix for [8336655: > java/net/httpclient/DigestEchoClient.java IOException: HTTP/1.1 header parser > received no bytes](https://bugs.openjdk.org/browse/JDK-8336655). > > This fix has been seen failing intermittently on the mainline. > > When an HTTP/1.1 connection is returned to the HTTP/1.1 pool, a > CleanupTrigger is registered with the connection. The purpose of the > CleanupTrigger is to get the connection socket registered with the selector > while the connection is idle in the pool, so that it can be closed and > removed from the pool if the peer closes the socket. It will also close and > remove the connection from the pool if the peer sends unexpected data. > > When the connection is taken out of the pool to handle the next exchange, the > CleanupTrigger is replaced with the exchange HTTP/1.1 publisher/subscribers. > The read suscriber is registered first, to make sure that it is in place > before the request headers are sent to the server, so that the response > headers are delivered to the exchange subscriber (and not to the > CleanupTrigger) when they arrive. > > However, there's a catch. The subscibers are actually switched in the read > scheduler, which means there's an opportunity for the write scheduler to > sneak in first. This fix makes sure that reading for the CleanupTrigger is > paused first, so that even if the write scheduler loop starts up first, no > data will be delivered by the read loop until the exchange subscriber gets > subscribed. This should prevent any data to reach the CleanupTrigger after > the new exchange has been started. This pull request has now been integrated. Changeset: 6169613d Author: Daniel Fuchs <dfu...@openjdk.org> URL: https://git.openjdk.org/jdk/commit/6169613d9f3f0bf019d04a37a1d8f28f1463c17c Stats: 52 lines in 3 files changed: 41 ins; 0 del; 11 mod 8336655: java/net/httpclient/DigestEchoClient.java IOException: HTTP/1.1 header parser received no bytes Reviewed-by: jpai ------------- PR: https://git.openjdk.org/jdk/pull/20571