hotspot/src/share/vm/prims/jvmtiEventController.cpp
void
JvmtiEventControllerPrivate::set_user_enabled(JvmtiEnvBase *env, JavaThread *thread,
jvmtiEvent event_type, bool enabled) {
{- -------------------------------------------
(1) (assert)
---------------------------------------- -}
assert(Threads::number_of_threads() == 0 || JvmtiThreadState_lock->is_locked(), "sanity check");
{- -------------------------------------------
(1) (トレース出力)
---------------------------------------- -}
EC_TRACE(("JVMTI [%s] # user %s event %s",
thread==NULL? "ALL": JvmtiTrace::safe_get_thread_name(thread),
enabled? "enabled" : "disabled", JvmtiTrace::event_name(event_type)));
{- -------------------------------------------
(1) JvmtiEventEnabled を更新する. この処理は引数に応じて2通り.
* 処理対象のスレッドが指定されていない場合 (= thread 引数が NULL の場合):
JvmtiEnvEventEnable::set_user_enabled() を呼んで,
「env 引数で指定された JvmtiEnvBase オブジェクト中の JvmtiEnvEventEnable オブジェクトの
_event_user_enabled フィールドに格納されている JvmtiEventEnabled オブジェクト」を更新する.
* 〃指定されている場合:
JvmtiEnvThreadEventEnable::set_user_enabled() を呼んで,
「thread 引数で指定された JavaThread に対応する JvmtiThreadState オブジェクト中の
JvmtiEnvThreadState オブジェクト中の JvmtiEnvThreadEventEnable オブジェクト中の
_event_user_enabled フィールドに格納されている JvmtiEventEnabled オブジェクト」を更新する.
---------------------------------------- -}
if (thread == NULL) {
env->env_event_enable()->set_user_enabled(event_type, enabled);
} else {
// create the thread state (if it didn't exist before)
JvmtiThreadState *state = JvmtiThreadState::state_for_while_locked(thread);
if (state != NULL) {
state->env_thread_state(env)->event_enable()->set_user_enabled(event_type, enabled);
}
}
{- -------------------------------------------
(1) JvmtiEventControllerPrivate::recompute_enabled() を呼んで,
"truly enabled event" 情報を更新する.
---------------------------------------- -}
recompute_enabled();
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.