@@ -259,9 +259,51 @@ jvmtiRawMonitorWait(jvmtiEnv *env,
259
259
break ;
260
260
case J9THREAD_INTERRUPTED :
261
261
/* FALLTHROUGH*/
262
- case J9THREAD_PRIORITY_INTERRUPTED :
262
+ case J9THREAD_PRIORITY_INTERRUPTED : {
263
+ #if JAVA_SPEC_VERSION >= 19
264
+ J9InternalVMFunctions const * const vmFuncs = vm -> internalVMFunctions ;
265
+ j9object_t threadObject = NULL ;
266
+ j9object_t threadLock = NULL ;
267
+
268
+ vmFuncs -> internalEnterVMFromJNI (currentThread );
269
+
270
+ threadObject = currentThread -> threadObject ;
271
+ Assert_JVMTI_true (NULL != threadObject );
272
+
273
+ threadLock = J9VMJAVALANGTHREAD_LOCK (currentThread , threadObject );
274
+ threadLock = (j9object_t )vmFuncs -> objectMonitorEnter (currentThread , threadLock );
275
+
276
+ if (J9_OBJECT_MONITOR_ENTER_FAILED (threadLock )) {
277
+ #if defined(J9VM_OPT_CRIU_SUPPORT )
278
+ if (J9_OBJECT_MONITOR_CRIU_SINGLE_THREAD_MODE_THROW == (UDATA )threadLock ) {
279
+ vmFuncs -> setCRIUSingleThreadModeJVMCRIUException (currentThread , 0 , 0 );
280
+ rc = JVMTI_ERROR_INTERNAL ;
281
+ } else
282
+ #endif /* defined(J9VM_OPT_CRIU_SUPPORT) */
283
+ if (J9_OBJECT_MONITOR_OOM == (UDATA )threadLock ) {
284
+ rc = JVMTI_ERROR_OUT_OF_MEMORY ;
285
+ }
286
+ goto release ;
287
+ } else {
288
+ /* Refetch J9VMThread->threadObject as it can be moved by the GC while waiting for the monitor. */
289
+ threadObject = currentThread -> threadObject ;
290
+ if (J9VMJAVALANGTHREAD_DEADINTERRUPT (currentThread , threadObject )) {
291
+ J9VMJAVALANGTHREAD_SET_DEADINTERRUPT (currentThread , threadObject , JNI_FALSE );
292
+ if (IS_JAVA_LANG_VIRTUALTHREAD (currentThread , threadObject )) {
293
+ J9VMJAVALANGTHREAD_SET_DEADINTERRUPT (currentThread , currentThread -> carrierThreadObject , JNI_FALSE );
294
+ }
295
+ }
296
+ vmFuncs -> objectMonitorExit (currentThread , threadLock );
297
+ }
298
+
263
299
rc = JVMTI_ERROR_INTERRUPT ;
300
+ release :
301
+ vmFuncs -> internalExitVMToJNI (currentThread );
302
+ #else /* JAVA_SPEC_VERSION >= 19 */
303
+ rc = JVMTI_ERROR_INTERRUPT ;
304
+ #endif /* JAVA_SPEC_VERSION >= 19 */
264
305
break ;
306
+ }
265
307
case J9THREAD_INVALID_ARGUMENT :
266
308
rc = JVMTI_ERROR_INTERRUPT ;
267
309
break ;
@@ -343,6 +385,3 @@ jvmtiRawMonitorNotifyAll(jvmtiEnv* env,
343
385
done :
344
386
TRACE_JVMTI_RETURN (jvmtiRawMonitorNotifyAll );
345
387
}
346
-
347
-
348
-
0 commit comments