> 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 > (Caused by: java.io.IOException: Data received while in pool). This should > not happen. > > The fix for [JDK-8338569](https://bugs.openjdk.org/browse/JDK-8338569) has > improved the situation but apparently didn't fix the issue completely. > The issue is that the write publisher manages to come active before the read > subscriber has been switched, which opens a window in which the old read > subscriber receives the data that should have been passed to the new one. > > To fix that, this change proposes to pause reading at the selector level > before connecting the flows with the new publisher /subscriber pair. This > should ensure that data doesn't reach the "old" subscriber, if the new write > publisher manage to send data before the new read subscriber is subscribed.
Daniel Fuchs has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains six additional commits since the last revision: - A better fix - Merge branch 'master' into DigestEchoClient-cleanup-8357639 - Access pendingSubscriptions only from InternalReadSubscriptionImpl - and synchronize offer/handle to avoid concurrent removal from the queue - Merge branch 'master' into DigestEchoClient-cleanup-8357639 - Avoid unnecessary volatile reads - 8357639 ------------- Changes: - all: https://git.openjdk.org/jdk/pull/25416/files - new: https://git.openjdk.org/jdk/pull/25416/files/ad1b28a1..8d728707 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=25416&range=02 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=25416&range=01-02 Stats: 50263 lines in 838 files changed: 26474 ins; 14478 del; 9311 mod Patch: https://git.openjdk.org/jdk/pull/25416.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/25416/head:pull/25416 PR: https://git.openjdk.org/jdk/pull/25416