hotspot/src/share/vm/runtime/interfaceSupport.hpp
ThreadInVMfromUnknown() : _thread(NULL) {
{- -------------------------------------------
(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.