> 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 with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains five additional commits since the last revision: - Merge branch 'master' into AggregatePublisher-8348108 - Fields could be final in test class - Review feedback - Merge branch 'master' into AggregatePublisher-8348108 - 8348108: Race condition in AggregatePublisher.AggregateSubscription ------------- Changes: - all: https://git.openjdk.org/jdk/pull/23204/files - new: https://git.openjdk.org/jdk/pull/23204/files/ff503a4d..9c5f1c02 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=23204&range=03 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=23204&range=02-03 Stats: 434 lines in 31 files changed: 126 ins; 96 del; 212 mod Patch: https://git.openjdk.org/jdk/pull/23204.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/23204/head:pull/23204 PR: https://git.openjdk.org/jdk/pull/23204