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