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