On Tue, 21 Feb 2023 16:28:52 GMT, Daniel Fuchs <[email protected]> wrote:

>> 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
>
> Daniel Fuchs has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Call tryRegister() before markSubscribed()

src/java.net.http/share/classes/jdk/internal/net/http/HttpClientImpl.java line 
586:

> 584: 
> 585:     /**
> 586:      * Remove the given subscriber to the subscribers list.

Suggestion:

     * Remove the given subscriber from the subscribers list.

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

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

Reply via email to