RFR: 8286194: ExecutorShutdown test fails intermittently
Jaikiran Pai
jpai at openjdk.java.net
Fri May 6 05:25:55 UTC 2022
On Thu, 5 May 2022 19:03:13 GMT, Daniel Fuchs <dfuchs at openjdk.org> wrote:
> Hi, please find here a patch that solves a rare intermittent test failure observed in the test `java/net/httpclient/ExecutorShutdown.java`
>
> A race condition coupled with some too eager synchronization was causing a deadlock between an Http2Connection close, a thread trying to shutdown the HttpClient due to a RejectedTaskException, and the SelectorManager thread trying to exit.
>
> The fix comprises several cleanup - in particular:
>
> - `Http2Connection`: no need to try to send a `GOAWAY` frame if the underlying TCP connection is already closed
> - `SSLFlowDelegate`/`SubscriberWrapper`: no need to trigger code that will request more data from upstream if the sequential scheduler that is supposed to handle that data once it arrives is already closed
> - `Http1Exchange`/`Http1Request`: proper cancellation of subscription if an exception is raised before `onSubscribe()` has been called
> - `HttpClientImpl`: avoid calling callbacks from within synchronized blocks when not necessary
> - `ReferenceTracker`: better thread dumps in case where the selector is still alive at the end of the test (remove the limit that limited the stack traces to 8 element max by no longer relying on `ThreadInfo::toString`)
test/jdk/java/net/httpclient/ReferenceTracker.java line 95:
> 93: }
> 94:
> 95: private static String toString(ThreadInfo info) {
Should we perhaps add a comment to this method explaining why we are duplicating the implementation of `ThreadInfo#toString()` here?
I can't find in commit logs or the documentation of the `ThreadInfo` class on why its `toString()` implementation just outputs only 8 stacktrace elements. Do you think we should remove that restriction or document it in a separate issue?
-------------
PR: https://git.openjdk.java.net/jdk/pull/8562
More information about the security-dev
mailing list