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.

-------------

Commit messages:
 - 8338569

Changes: https://git.openjdk.org/jdk/pull/20623/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=20623&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8338569
  Stats: 173 lines in 6 files changed: 116 ins; 14 del; 43 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

Reply via email to