hotspot/src/share/vm/prims/jvmtiEnv.cpp
// Threads_lock NOT held, java_thread not protected by lock
// java_thread - pre-checked
// monitor_ptr - pre-checked for NULL
jvmtiError
JvmtiEnv::GetCurrentContendedMonitor(JavaThread* java_thread, jobject* monitor_ptr) {
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
jvmtiError err = JVMTI_ERROR_NONE;
uint32_t debug_bits = 0;
JavaThread* calling_thread = JavaThread::current();
{- -------------------------------------------
(1) java_thread 引数で指定されたスレッドをブロックしているモニターの情報を取得する.
取得方法は以下の2通り.
* 対象のスレッドがサスペンドしている場合:
JvmtiEnvBase::get_current_contended_monitor() で取得.
* 対象のスレッドがサスペンドしていない場合:
VM_GetCurrentContendedMonitor で取得.
---------------------------------------- -}
if (is_thread_fully_suspended(java_thread, true, &debug_bits)) {
err = get_current_contended_monitor(calling_thread, java_thread, monitor_ptr);
} else {
// get contended monitor information at safepoint.
VM_GetCurrentContendedMonitor op(this, calling_thread, java_thread, monitor_ptr);
VMThread::execute(&op);
err = op.result();
}
{- -------------------------------------------
(1) リターン
---------------------------------------- -}
return err;
} /* end GetCurrentContendedMonitor */
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.