> The `ResponseSubscribers.HttpResponseInputStream` class has an assert that > has been observed firing (rarely) when running the > `java/net/httpclient/AsyncExecutorShutdown.java` test. > > After a thorough analysis of the code and the log failure I am convinced that > the issue is due to a misplaced assert. > If cancellation happens asynchronously while the subscriber is being > subscribed with the lower layers of the stack, the `HttpResponseInputStream` > might get closed and the `LAST_LIST` buffer might be offered after `closed == > false` has been observed by the `onSubscribed` method, but before the > assertion has been checked. The assertion assumes that the queue must be > empty, but it might not if `close` has been called and the `LAST_LIST` buffer > has been offered. > > Moving the assert from within the synchronized block, to ensure that the > observed value of `closed` is consistent with the state of the queue, should > fix it. I have tagged the bug as `noreg-hard`, I'm not sure it would be fair > to say that `AsyncExecutorShutdown.java` can be used to verify the fix.
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 three additional commits since the last revision: - Merge branch 'master' into AsyncExecutorShutdown-8297424 - Revert assignement of pendingResponseSubscriber to null to avoid race conditions with ternary operators - 8297424 ------------- Changes: - all: https://git.openjdk.org/jdk/pull/11332/files - new: https://git.openjdk.org/jdk/pull/11332/files/b4e462b4..71b59be3 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=11332&range=01 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=11332&range=00-01 Stats: 8939 lines in 305 files changed: 5754 ins; 2091 del; 1094 mod Patch: https://git.openjdk.org/jdk/pull/11332.diff Fetch: git fetch https://git.openjdk.org/jdk pull/11332/head:pull/11332 PR: https://git.openjdk.org/jdk/pull/11332
