On Mon, 28 Nov 2022 14:09:59 GMT, Daniel Fuchs <[email protected]> wrote:
>> 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 four additional > commits since the last revision: > > - Merge branch 'master' into AsyncExecutorShutdown-8297424 > - Merge branch 'master' into AsyncExecutorShutdown-8297424 > - Revert assignement of pendingResponseSubscriber to null to avoid race > conditions with ternary operators > - 8297424 Marked as reviewed by jpai (Reviewer). ------------- PR: https://git.openjdk.org/jdk/pull/11332
