> 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.
Daniel Fuchs has updated the pull request incrementally with one additional commit since the last revision: Update src/java.net.http/share/classes/jdk/internal/net/http/ConnectionPool.java ------------- Changes: - all: https://git.openjdk.org/jdk/pull/20623/files - new: https://git.openjdk.org/jdk/pull/20623/files/da64bb8a..dc52bbc1 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=20623&range=02 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=20623&range=01-02 Stats: 1 line in 1 file changed: 0 ins; 1 del; 0 mod Patch: https://git.openjdk.org/jdk/pull/20623.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/20623/head:pull/20623 PR: https://git.openjdk.org/jdk/pull/20623