Integrated: 8297424: java/net/httpclient/AsyncExecutorShutdown.java fails in AssertionError due to misplaced assert
Daniel Fuchs
dfuchs at openjdk.org
Tue Nov 29 12:40:24 UTC 2022
On Wed, 23 Nov 2022 19:38:50 GMT, Daniel Fuchs <dfuchs at openjdk.org> 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.
This pull request has now been integrated.
Changeset: 5d2772a4
Author: Daniel Fuchs <dfuchs at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/5d2772a43ef6409bf556cefb4eb4242594451674
Stats: 10 lines in 2 files changed: 3 ins; 4 del; 3 mod
8297424: java/net/httpclient/AsyncExecutorShutdown.java fails in AssertionError due to misplaced assert
Reviewed-by: jpai
-------------
PR: https://git.openjdk.org/jdk/pull/11332
More information about the net-dev
mailing list