< prev index next >

src/share/vm/runtime/thread.cpp

Print this page

        

*** 2438,2457 **** // check_special_condition_for_native_trans with slightly different // semantics for use by critical native wrappers. It does all the // normal checks but also performs the transition back into // thread_in_Java state. This is required so that critical natives // can potentially block and perform a GC if they are the last thread ! // exiting the GC_locker. void JavaThread::check_special_condition_for_native_trans_and_transition(JavaThread *thread) { check_special_condition_for_native_trans(thread); // Finish the transition thread->set_thread_state(_thread_in_Java); if (thread->do_critical_native_unlock()) { ThreadInVMfromJavaNoAsyncException tiv(thread); ! GC_locker::unlock_critical(thread); thread->clear_critical_native_unlock(); } } // We need to guarantee the Threads_lock here, since resumes are not --- 2438,2457 ---- // check_special_condition_for_native_trans with slightly different // semantics for use by critical native wrappers. It does all the // normal checks but also performs the transition back into // thread_in_Java state. This is required so that critical natives // can potentially block and perform a GC if they are the last thread ! // exiting the GCLocker. void JavaThread::check_special_condition_for_native_trans_and_transition(JavaThread *thread) { check_special_condition_for_native_trans(thread); // Finish the transition thread->set_thread_state(_thread_in_Java); if (thread->do_critical_native_unlock()) { ThreadInVMfromJavaNoAsyncException tiv(thread); ! GCLocker::unlock_critical(thread); thread->clear_critical_native_unlock(); } } // We need to guarantee the Threads_lock here, since resumes are not
< prev index next >