Top


定義場所(file name)

hotspot/src/share/vm/prims/jvmtiEnv.cpp

説明(description)

// Threads_lock NOT held, java_thread not protected by lock
// java_thread - pre-checked
// data - NULL is a valid value, must be checked

名前(function name)

jvmtiError
JvmtiEnv::SetThreadLocalStorage(JavaThread* java_thread, const void* data) {

本体部(body)

  {- -------------------------------------------
  (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.