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

Reply via email to