Top


定義場所(file name)

hotspot/src/share/vm/runtime/interfaceSupport.hpp

名前(function name)

  ThreadInVMfromUnknown() : _thread(NULL) {

本体部(body)

  {- -------------------------------------------
  (1) (カレントスレッドが JavaThread でない場合には何もしない.
       また, カレントスレッドの状態が _thread_in_native でない場合にも何もしない)

      ThreadStateTransition::transition_from_native() を呼んで, 
      JavaThreadState を _thread_in_vm に変更する.
      (ついでに, 実際に変更処理を行った場合には, 処理対象のスレッドを _thread フィールドに記録している. 
       これはデストラクタで使用.)
      ---------------------------------------- -}

        Thread* t = Thread::current();
        if (t->is_Java_thread()) {
          JavaThread* t2 = (JavaThread*) t;
          if (t2->thread_state() == _thread_in_native) {
            _thread = t2;
            ThreadStateTransition::transition_from_native(t2, _thread_in_vm);
            // Used to have a HandleMarkCleaner but that is dangerous as
            // it could free a handle in our (indirect, nested) caller.
            // We expect any handles will be short lived and figure we
            // don't need an actual HandleMark.
          }
        }
      }

This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.