On Wed, 22 Jan 2025 15:34:33 GMT, Daniel Fuchs <dfu...@openjdk.org> wrote:

>> There's a subtle race condition in AggregatePublisher.AggregateSubscription. 
>> The AggregatePublisher will subscribe to downstream publishers in turn, 
>> subscribing to the next publisher when the previous publisher onComplete() 
>> has been called.
>> 
>> The request() method passed to the upstream subscriber detects that all 
>> subscribers have completed if the current downstream publisher is null and 
>> the queue of publisher yet to subscribe to is empty.
>> 
>> The event loop is responsible for subscribing to the next publisher, and 
>> does so by polling the queue and assigning the returned value to 
>> this.publisher, and then subscribe to that publisher. However, when 
>> subscribing to the last publisher in the queue, there is a small time window 
>> where the queue can be observed to be empty, before this.publisher is 
>> assigned.
>> 
>> The fix adds synchronization to make sure a consistent state is observed 
>> when it matters. Typically - setting `this.publisher` or taking a snapshot 
>> of a publisher and its subscription, should be done within synchronized.
>
> 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/RequestPublishers.java

Marked as reviewed by jpai (Reviewer).

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

PR Review: https://git.openjdk.org/jdk/pull/23204#pullrequestreview-2567562802

Reply via email to