Please, review this fix correcting the JVMTI  `RawMonitorWait()` implementation.
The `RawMonitorWait()` is using the the  `jt->is_interrupted(true)` to update 
the interrupt status of the interrupted waiting thread.  The issue is that when 
it calls `jt->is_interrupted(true)` to fetch and clear the `interrupt status` 
of the virtual thread, this information is not propagated to the 
`java.lang.Thread` instance.
In the `VirtualThread` class implementation the `interrupt status` for virtual 
thread is stored for both virtual and carrier threads. It is because the 
implementation of object monitors for virtual threads is based on pinning 
virtual threads, and so, always operates on carrier thread. The fix is to clear 
the interrupt status for both virtual and carrier  `java.lang.Thread` instances.

Testing:
 - tested with new test 
`hotspot/jtreg/serviceability/jvmti/vthread/InterruptRawMonitor` which is 
passed with the fix and failed without it
 - ran mach5 tiers 1-6

-------------

Commit messages:
 - fix trailing space in libInterruptRawMonitor.cpp
 - 8325187: JVMTI GetThreadState says virtual thread is 
JVMTI_THREAD_STATE_INTERRUPTED when it no longer is

Changes: https://git.openjdk.org/jdk/pull/18093/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=18093&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8325187
  Stats: 157 lines in 4 files changed: 155 ins; 0 del; 2 mod
  Patch: https://git.openjdk.org/jdk/pull/18093.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/18093/head:pull/18093

PR: https://git.openjdk.org/jdk/pull/18093

Reply via email to