This fix revisits an assertion that has been observed failing in 
ResponseSubscribers.HttpResponseInputStream.

The HttpResponseInputStream has the logic to wait until a buffer has been taken 
out of the queue before requesting a new one. Therefore there should at most be 
one byte buffer in the queue, except in the case of error (or asychronous 
close), where a LAST_LIST sentinel is inserted in the queue to unblock the 
consumer of the input stream, which might be blocked in queue.take().

The  HttpResponseInputStream thus asserts, when processing a subscription, that 
the remaining capacity of the queue should be greater than 1 (unless already 
closed), to ensure that there will be room for the LAST_LIST sentinel. However, 
in case of asynchronous shutdown of the executor, it's possible that the 
subscriber will be marked failed and the LAST_LIST sentinel inserted into the 
queue before/at the same time that the subscription is processed.

This fix proposes to relax the assertion to only fire if closed == false and 
failed == null and capacity <= 1 when processing the subscription

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

Commit messages:
 - 8299338
 - 8299338

Changes: https://git.openjdk.org/jdk/pull/12677/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=12677&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8299338
  Stats: 6 lines in 2 files changed: 2 ins; 0 del; 4 mod
  Patch: https://git.openjdk.org/jdk/pull/12677.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/12677/head:pull/12677

PR: https://git.openjdk.org/jdk/pull/12677

Reply via email to