hotspot/src/share/vm/prims/jvmtiEnv.cpp
// Threads_lock NOT held, java_thread not protected by lock
// java_thread - pre-checked
// data - NULL is a valid value, must be checked
jvmtiError
JvmtiEnv::SetThreadLocalStorage(JavaThread* java_thread, const void* data) {
{- -------------------------------------------
(1) JavaThread::jvmti_thread_state() を呼んで, 処理対象のスレッド(java_thread)に対応する JvmtiThreadState を取得する.
もし対象のスレッドが JvmtiThreadState を持っていなければ (= JavaThread::jvmti_thread_state() が NULL),
以下のどちらかを行う.
* data 引数が NULL の場合:
(この場合は何もしなくてよいので) 何もせずにここでリターン
* data 引数が NULL ではない場合:
JvmtiThreadState::state_for() を呼んで JvmtiThreadState を確保する.
(確保に失敗したら, ここでリターン(JVMTI_ERROR_THREAD_NOT_ALIVE エラー))
---------------------------------------- -}
JvmtiThreadState* state = java_thread->jvmti_thread_state();
if (state == NULL) {
if (data == NULL) {
// leaving state unset same as data set to NULL
return JVMTI_ERROR_NONE;
}
// otherwise, create the state
state = JvmtiThreadState::state_for(java_thread);
if (state == NULL) {
return JVMTI_ERROR_THREAD_NOT_ALIVE;
}
}
{- -------------------------------------------
(1) JvmtiEnvThreadState::set_agent_thread_local_storage_data() を呼んで,
data 引数の値を JvmtiEnvThreadState 内に格納する.
---------------------------------------- -}
state->env_thread_state(this)->set_agent_thread_local_storage_data((void*)data);
{- -------------------------------------------
(1) リターン
---------------------------------------- -}
return JVMTI_ERROR_NONE;
} /* end SetThreadLocalStorage */
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.