RFR: 8334085: Test crash: assert(thread->held_monitor_count() == 0) failed: Must be
Serguei Spitsyn
sspitsyn at openjdk.org
Tue Jul 23 07:03:57 UTC 2024
The test `serviceability/jvmti/GetOwnedMonitorInfo/GetOwnedMonitorInfoTest.java` is failing with the assert in the `thaw()` function. The assert is not fully correct as it does not account for an unexpected scenario.
Thanks to Patricio for reproducing this failure and identifying the root cause:
> The problem is that we can unmount a virtual thread, then mount it again, thaw a few frames, execute code that acquires a JNI monitor, and then call thaw again without releasing that monitor. In this test this will happen if the vthread is unmounted in System.out.println("Thread doing JNI call: " ...) because of contention with the main thread doing System.out.println("Main waiting for event.").
The issue can be reproduced by adding Thread.yield() before jniMonitorEnterAndLetObjectDie().
The fix corrects the assert to account for the `thread->jni_monitor_count()`.
Also, the fix includes the test tweak described above which makes this failure always reproducible.
Testing:
- Ran the test `GetOwnedMonitorInfoTest.java` locally
- Mach5 tiers 1-6 are passed
-------------
Commit messages:
- 8334085: Test crash: assert(thread->held_monitor_count() == 0) failed: Must be
Changes: https://git.openjdk.org/jdk/pull/20294/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=20294&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8334085
Stats: 3 lines in 2 files changed: 1 ins; 0 del; 2 mod
Patch: https://git.openjdk.org/jdk/pull/20294.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/20294/head:pull/20294
PR: https://git.openjdk.org/jdk/pull/20294
More information about the hotspot-runtime-dev
mailing list