RFR: 8325187: JVMTI GetThreadState says virtual thread is JVMTI_THREAD_STATE_INTERRUPTED when it no longer is
Chris Plummer
cjplummer at openjdk.org
Mon Mar 4 22:12:53 UTC 2024
On Fri, 1 Mar 2024 23:26:48 GMT, Serguei Spitsyn <sspitsyn at openjdk.org> wrote:
> 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
Changes requested by cjplummer (Reviewer).
test/hotspot/jtreg/serviceability/jvmti/vthread/InterruptRawMonitor/libInterruptRawMonitor.cpp line 32:
> 30: static jvmtiEnv *jvmti = nullptr;
> 31:
> 32: static void check_thread_state(JNIEnv *jni, int check_idx) {
The name of this function could be better since it only checks that the state is not interrupted. Maybe check_thread_not_interrupt().
test/hotspot/jtreg/serviceability/jvmti/vthread/InterruptRawMonitor/libInterruptRawMonitor.cpp line 36:
> 34:
> 35: LOG("check #%d: Thread State: (0x%x) %s\n", check_idx, state, TranslateState(state));
> 36: if (state & JVMTI_THREAD_STATE_INTERRUPTED) {
Should explicitly check `!= 0`
-------------
PR Review: https://git.openjdk.org/jdk/pull/18093#pullrequestreview-1915444251
PR Review Comment: https://git.openjdk.org/jdk/pull/18093#discussion_r1511855890
PR Review Comment: https://git.openjdk.org/jdk/pull/18093#discussion_r1511857152
More information about the serviceability-dev
mailing list