diff --git a/vm/vmcore/src/thread/thread_ti_instr.cpp b/vm/vmcore/src/thread/thread_ti_instr.cpp index f768275..98cb23f 100644 --- a/vm/vmcore/src/thread/thread_ti_instr.cpp +++ b/vm/vmcore/src/thread/thread_ti_instr.cpp @@ -364,13 +364,16 @@ IDATA VMCALL jthread_get_contended_monitor(jthread java_thread, jobject * monitor) { assert(java_thread); + assert(monitor); + *monitor = NULL; vm_thread_t vm_thread = jthread_get_vm_thread_from_java(java_thread); - assert(vm_thread); + if (!vm_thread) { + return TM_ERROR_NONE; + } jvmti_thread_t jvmti_thread = &vm_thread->jvmti_thread; - if (jvmti_thread) + if (jvmti_thread) { *monitor = jvmti_thread->contended_monitor; - else - *monitor = NULL; + } return TM_ERROR_NONE; } // jthread_get_contended_monitor @@ -384,13 +387,16 @@ jthread_get_contended_monitor(jthread java_thread, jobject * monitor) IDATA VMCALL jthread_get_wait_monitor(jthread java_thread, jobject * monitor) { assert(java_thread); + assert(monitor); + *monitor = NULL; vm_thread_t vm_thread = jthread_get_vm_thread_from_java(java_thread); - assert(vm_thread); + if (!vm_thread) { + return TM_ERROR_NONE; + } jvmti_thread_t jvmti_thread = &vm_thread->jvmti_thread; - if (jvmti_thread) + if (jvmti_thread) { *monitor = jvmti_thread->wait_monitor; - else - *monitor = NULL; + } return TM_ERROR_NONE; } // jthread_get_wait_monitor @@ -407,6 +413,7 @@ IDATA VMCALL jthread_get_lock_owner(jobject monitor, jthread * lock_owner) assert(monitor); assert(lock_owner); + lock_owner = NULL; hythread_suspend_disable(); hythread_thin_monitor_t *lockword = vm_object_get_lockword_addr(monitor); hythread_t native_thread = hythread_thin_monitor_get_owner(lockword); @@ -414,7 +421,9 @@ IDATA VMCALL jthread_get_lock_owner(jobject monitor, jthread * lock_owner) *lock_owner = NULL; } else { vm_thread_t vm_thread = jthread_get_vm_thread(native_thread); - assert(vm_thread); + if (!vm_thread) { + return TM_ERROR_ILLEGAL_STATE; + } *lock_owner = vm_thread->java_thread; } hythread_suspend_enable(); @@ -472,9 +481,11 @@ jthread_get_owned_monitors(jthread java_thread, if (status != TM_ERROR_NONE) { return status; } - assert(java_thread); vm_thread_t vm_thread = jthread_get_vm_thread_from_java(java_thread); - assert(vm_thread); + if (!vm_thread) { + status = hythread_global_unlock(); + return status; + } jvmti_thread_t jvmti_thread = &vm_thread->jvmti_thread; if (!jvmti_thread) {