On Thu, 15 Aug 2024 18:22:54 GMT, Viktor Klang <vkl...@openjdk.org> wrote:
> My suspicion is that Condition::await() throws before having successfully > reacquired the lock, and this exception is swallowed because Lock::unlock() > then throws when invoke with an IllegalMonitorStateException as the current > thread was not reestablished as the owner. > > So this PR is intended to harden the reacquisition of await-ing methods in > AQS and AQLS so that instead of throwing they spin-loop trying to reacquire > the lockāat least a thread dump would show where the Thread is stuck trying > to reacquire. > > There's also the option of attempting to log a JFR event on the first > reacquisition failure, but that might need to be done with a pre-created > event as the cause of the failing acquisition may be an OOME. > > I also needed to harden the TestDisposerRace itself, as it currently tries to > provoke OOMEs but then proceeds to want to allocate objects used for the test > itself. I'm not super-happy about the changes there, but they should be safer > than before. > > The first RuntimeException/Error encountered will be rethrown upon success to > facilitate debugging. test/jdk/sun/java2d/Disposer/TestDisposerRace.java line 88: > 86: > 87: private static <T> T retryOnOOME(Supplier<T> allocator) { > 88: for(;;) { nit Suggestion: for (;;) { test/jdk/sun/java2d/Disposer/TestDisposerRace.java line 100: > 98: > 99: private static <E extends Exception> void > retryOnOOME(ThrowingRunnable<E> tr) throws E { > 100: for(;;) { nit Suggestion: for(;;) { test/jdk/sun/java2d/Disposer/TestDisposerRace.java line 117: > 115: MyDisposerRecord disposerRecord = > retryOnOOME(MyDisposerRecord::new); > 116: > 117: while(count > 0) { Suggestion: while (count > 0) { test/jdk/sun/java2d/Disposer/TestDisposerRace.java line 117: > 115: MyDisposerRecord disposerRecord = > retryOnOOME(MyDisposerRecord::new); > 116: > 117: while(count > 0) { nit Suggestion: while (count > 0) { ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/20602#discussion_r1736738246 PR Review Comment: https://git.openjdk.org/jdk/pull/20602#discussion_r1736738799 PR Review Comment: https://git.openjdk.org/jdk/pull/20602#discussion_r1732793046 PR Review Comment: https://git.openjdk.org/jdk/pull/20602#discussion_r1736739470