< prev index next >

src/hotspot/share/runtime/thread.cpp

Print this page

        

*** 1835,1845 **** this->cache_global_variables(); // Thread is now sufficiently initialized to be handled by the safepoint code as being // in the VM. Change thread state from _thread_new to _thread_in_vm ! ThreadStateTransition::transition(this, _thread_new, _thread_in_vm); // Before a thread is on the threads list it is always safe, so after leaving the // _thread_new we should emit a instruction barrier. The distance to modified code // from here is probably far enough, but this is consistent and safe. OrderAccess::cross_modify_fence(); --- 1835,1845 ---- this->cache_global_variables(); // Thread is now sufficiently initialized to be handled by the safepoint code as being // in the VM. Change thread state from _thread_new to _thread_in_vm ! ThreadStateTransition::transition_and_fence(this, _thread_new, _thread_in_vm); // Before a thread is on the threads list it is always safe, so after leaving the // _thread_new we should emit a instruction barrier. The distance to modified code // from here is probably far enough, but this is consistent and safe. OrderAccess::cross_modify_fence();
*** 2473,2486 **** void JavaThread::java_suspend_self_with_safepoint_check() { assert(this == Thread::current(), "invariant"); JavaThreadState state = thread_state(); set_thread_state(_thread_blocked); java_suspend_self(); ! set_thread_state_fence(state); // Since we are not using a regular thread-state transition helper here, // we must manually emit the instruction barrier after leaving a safe state. OrderAccess::cross_modify_fence(); if (state != _thread_in_native) { SafepointMechanism::block_if_requested(this); } } --- 2473,2487 ---- void JavaThread::java_suspend_self_with_safepoint_check() { assert(this == Thread::current(), "invariant"); JavaThreadState state = thread_state(); set_thread_state(_thread_blocked); java_suspend_self(); ! set_thread_state(state); // Since we are not using a regular thread-state transition helper here, // we must manually emit the instruction barrier after leaving a safe state. OrderAccess::cross_modify_fence(); + InterfaceSupport::serialize_thread_state_with_handler(this); if (state != _thread_in_native) { SafepointMechanism::block_if_requested(this); } }
*** 3625,3652 **** Handle thread_group = create_initial_thread_group(CHECK); Universe::set_main_thread_group(thread_group()); initialize_class(vmSymbols::java_lang_Thread(), CHECK); oop thread_object = create_initial_thread(thread_group, main_thread, CHECK); main_thread->set_threadObj(thread_object); - // Set thread status to running since main thread has // been started and running. java_lang_Thread::set_thread_status(thread_object, java_lang_Thread::RUNNABLE); // The VM creates objects of this class. initialize_class(vmSymbols::java_lang_Module(), CHECK); - #ifdef ASSERT - InstanceKlass *k = SystemDictionary::UnsafeConstants_klass(); - assert(k->is_not_initialized(), "UnsafeConstants should not already be initialized"); - #endif - - // initialize the hardware-specific constants needed by Unsafe - initialize_class(vmSymbols::jdk_internal_misc_UnsafeConstants(), CHECK); - jdk_internal_misc_UnsafeConstants::set_unsafe_constants(); - // The VM preresolves methods to these classes. Make sure that they get initialized initialize_class(vmSymbols::java_lang_reflect_Method(), CHECK); initialize_class(vmSymbols::java_lang_ref_Finalizer(), CHECK); // Phase 1 of the system initialization in the library, java.lang.System class initialization --- 3626,3643 ----
< prev index next >