< prev index next >
src/share/vm/runtime/thread.cpp
Print this page
*** 948,978 ****
// Creates the initial ThreadGroup
static Handle create_initial_thread_group(TRAPS) {
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_ThreadGroup(), true, CHECK_NH);
! instanceKlassHandle klass (THREAD, k);
! Handle system_instance = klass->allocate_instance_handle(CHECK_NH);
{
JavaValue result(T_VOID);
JavaCalls::call_special(&result,
system_instance,
! klass,
vmSymbols::object_initializer_name(),
vmSymbols::void_method_signature(),
CHECK_NH);
}
Universe::set_system_thread_group(system_instance());
! Handle main_instance = klass->allocate_instance_handle(CHECK_NH);
{
JavaValue result(T_VOID);
Handle string = java_lang_String::create_from_str("main", CHECK_NH);
JavaCalls::call_special(&result,
main_instance,
! klass,
vmSymbols::object_initializer_name(),
vmSymbols::threadgroup_string_void_signature(),
system_instance,
string,
CHECK_NH);
--- 948,978 ----
// Creates the initial ThreadGroup
static Handle create_initial_thread_group(TRAPS) {
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_ThreadGroup(), true, CHECK_NH);
! InstanceKlass* ik = InstanceKlass::cast(k);
! Handle system_instance = ik->allocate_instance_handle(CHECK_NH);
{
JavaValue result(T_VOID);
JavaCalls::call_special(&result,
system_instance,
! ik,
vmSymbols::object_initializer_name(),
vmSymbols::void_method_signature(),
CHECK_NH);
}
Universe::set_system_thread_group(system_instance());
! Handle main_instance = ik->allocate_instance_handle(CHECK_NH);
{
JavaValue result(T_VOID);
Handle string = java_lang_String::create_from_str("main", CHECK_NH);
JavaCalls::call_special(&result,
main_instance,
! ik,
vmSymbols::object_initializer_name(),
vmSymbols::threadgroup_string_void_signature(),
system_instance,
string,
CHECK_NH);
*** 982,1003 ****
// Creates the initial Thread
static oop create_initial_thread(Handle thread_group, JavaThread* thread,
TRAPS) {
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK_NULL);
! instanceKlassHandle klass (THREAD, k);
! instanceHandle thread_oop = klass->allocate_instance_handle(CHECK_NULL);
java_lang_Thread::set_thread(thread_oop(), thread);
java_lang_Thread::set_priority(thread_oop(), NormPriority);
thread->set_threadObj(thread_oop());
Handle string = java_lang_String::create_from_str("main", CHECK_NULL);
JavaValue result(T_VOID);
JavaCalls::call_special(&result, thread_oop,
! klass,
vmSymbols::object_initializer_name(),
vmSymbols::threadgroup_string_void_signature(),
thread_group,
string,
CHECK_NULL);
--- 982,1003 ----
// Creates the initial Thread
static oop create_initial_thread(Handle thread_group, JavaThread* thread,
TRAPS) {
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK_NULL);
! InstanceKlass* ik = InstanceKlass::cast(k);
! instanceHandle thread_oop = ik->allocate_instance_handle(CHECK_NULL);
java_lang_Thread::set_thread(thread_oop(), thread);
java_lang_Thread::set_priority(thread_oop(), NormPriority);
thread->set_threadObj(thread_oop());
Handle string = java_lang_String::create_from_str("main", CHECK_NULL);
JavaValue result(T_VOID);
JavaCalls::call_special(&result, thread_oop,
! ik,
vmSymbols::object_initializer_name(),
vmSymbols::threadgroup_string_void_signature(),
thread_group,
string,
CHECK_NULL);
*** 1052,1064 ****
}
// General purpose hook into Java code, run once when the VM is initialized.
// The Java library method itself may be changed independently from the VM.
static void call_postVMInitHook(TRAPS) {
! Klass* k = SystemDictionary::resolve_or_null(vmSymbols::jdk_internal_vm_PostVMInitHook(), THREAD);
! instanceKlassHandle klass (THREAD, k);
! if (klass.not_null()) {
JavaValue result(T_VOID);
JavaCalls::call_static(&result, klass, vmSymbols::run_method_name(),
vmSymbols::void_method_signature(),
CHECK);
}
--- 1052,1063 ----
}
// General purpose hook into Java code, run once when the VM is initialized.
// The Java library method itself may be changed independently from the VM.
static void call_postVMInitHook(TRAPS) {
! Klass* klass = SystemDictionary::resolve_or_null(vmSymbols::jdk_internal_vm_PostVMInitHook(), THREAD);
! if (klass != NULL) {
JavaValue result(T_VOID);
JavaCalls::call_static(&result, klass, vmSymbols::run_method_name(),
vmSymbols::void_method_signature(),
CHECK);
}
*** 1068,1079 ****
// the vm info string
ResourceMark rm(THREAD);
const char *vm_info = VM_Version::vm_info_string();
// java.lang.System class
! Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
! instanceKlassHandle klass (THREAD, k);
// setProperty arguments
Handle key_str = java_lang_String::create_from_str("java.vm.info", CHECK);
Handle value_str = java_lang_String::create_from_str(vm_info, CHECK);
--- 1067,1077 ----
// the vm info string
ResourceMark rm(THREAD);
const char *vm_info = VM_Version::vm_info_string();
// java.lang.System class
! Klass* klass = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
// setProperty arguments
Handle key_str = java_lang_String::create_from_str("java.vm.info", CHECK);
Handle value_str = java_lang_String::create_from_str(vm_info, CHECK);
*** 1095,1106 ****
bool daemon, TRAPS) {
assert(thread_group.not_null(), "thread group should be specified");
assert(threadObj() == NULL, "should only create Java thread object once");
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK);
! instanceKlassHandle klass (THREAD, k);
! instanceHandle thread_oop = klass->allocate_instance_handle(CHECK);
java_lang_Thread::set_thread(thread_oop(), this);
java_lang_Thread::set_priority(thread_oop(), NormPriority);
set_threadObj(thread_oop());
--- 1093,1104 ----
bool daemon, TRAPS) {
assert(thread_group.not_null(), "thread group should be specified");
assert(threadObj() == NULL, "should only create Java thread object once");
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK);
! InstanceKlass* ik = InstanceKlass::cast(k);
! instanceHandle thread_oop = ik->allocate_instance_handle(CHECK);
java_lang_Thread::set_thread(thread_oop(), this);
java_lang_Thread::set_priority(thread_oop(), NormPriority);
set_threadObj(thread_oop());
*** 1108,1129 ****
if (thread_name != NULL) {
Handle name = java_lang_String::create_from_str(thread_name, CHECK);
// Thread gets assigned specified name and null target
JavaCalls::call_special(&result,
thread_oop,
! klass,
vmSymbols::object_initializer_name(),
vmSymbols::threadgroup_string_void_signature(),
thread_group, // Argument 1
name, // Argument 2
THREAD);
} else {
// Thread gets assigned name "Thread-nnn" and null target
// (java.lang.Thread doesn't have a constructor taking only a ThreadGroup argument)
JavaCalls::call_special(&result,
thread_oop,
! klass,
vmSymbols::object_initializer_name(),
vmSymbols::threadgroup_runnable_void_signature(),
thread_group, // Argument 1
Handle(), // Argument 2
THREAD);
--- 1106,1127 ----
if (thread_name != NULL) {
Handle name = java_lang_String::create_from_str(thread_name, CHECK);
// Thread gets assigned specified name and null target
JavaCalls::call_special(&result,
thread_oop,
! ik,
vmSymbols::object_initializer_name(),
vmSymbols::threadgroup_string_void_signature(),
thread_group, // Argument 1
name, // Argument 2
THREAD);
} else {
// Thread gets assigned name "Thread-nnn" and null target
// (java.lang.Thread doesn't have a constructor taking only a ThreadGroup argument)
JavaCalls::call_special(&result,
thread_oop,
! ik,
vmSymbols::object_initializer_name(),
vmSymbols::threadgroup_runnable_void_signature(),
thread_group, // Argument 1
Handle(), // Argument 2
THREAD);
*** 1136,1146 ****
if (HAS_PENDING_EXCEPTION) {
return;
}
! KlassHandle group(THREAD, SystemDictionary::ThreadGroup_klass());
Handle threadObj(THREAD, this->threadObj());
JavaCalls::call_special(&result,
thread_group,
group,
--- 1134,1144 ----
if (HAS_PENDING_EXCEPTION) {
return;
}
! Klass* group = SystemDictionary::ThreadGroup_klass();
Handle threadObj(THREAD, this->threadObj());
JavaCalls::call_special(&result,
thread_group,
group,
*** 1777,1787 ****
}
if (!destroy_vm) {
if (uncaught_exception.not_null()) {
EXCEPTION_MARK;
// Call method Thread.dispatchUncaughtException().
! KlassHandle thread_klass(THREAD, SystemDictionary::Thread_klass());
JavaValue result(T_VOID);
JavaCalls::call_virtual(&result,
threadObj, thread_klass,
vmSymbols::dispatchUncaughtException_name(),
vmSymbols::throwable_void_signature(),
--- 1775,1785 ----
}
if (!destroy_vm) {
if (uncaught_exception.not_null()) {
EXCEPTION_MARK;
// Call method Thread.dispatchUncaughtException().
! Klass* thread_klass = SystemDictionary::Thread_klass();
JavaValue result(T_VOID);
JavaCalls::call_virtual(&result,
threadObj, thread_klass,
vmSymbols::dispatchUncaughtException_name(),
vmSymbols::throwable_void_signature(),
*** 1815,1825 ****
if (!is_Compiler_thread()) {
int count = 3;
while (java_lang_Thread::threadGroup(threadObj()) != NULL && (count-- > 0)) {
EXCEPTION_MARK;
JavaValue result(T_VOID);
! KlassHandle thread_klass(THREAD, SystemDictionary::Thread_klass());
JavaCalls::call_virtual(&result,
threadObj, thread_klass,
vmSymbols::exit_method_name(),
vmSymbols::void_method_signature(),
THREAD);
--- 1813,1823 ----
if (!is_Compiler_thread()) {
int count = 3;
while (java_lang_Thread::threadGroup(threadObj()) != NULL && (count-- > 0)) {
EXCEPTION_MARK;
JavaValue result(T_VOID);
! Klass* thread_klass = SystemDictionary::Thread_klass();
JavaCalls::call_virtual(&result,
threadObj, thread_klass,
vmSymbols::exit_method_name(),
vmSymbols::void_method_signature(),
THREAD);
*** 3386,3398 ****
//
// System.initPhase1 initializes the system properties, the static
// fields in, out, and err. Set up java signal handlers, OS-specific
// system settings, and thread group of the main thread.
static void call_initPhase1(TRAPS) {
! Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
! instanceKlassHandle klass (THREAD, k);
!
JavaValue result(T_VOID);
JavaCalls::call_static(&result, klass, vmSymbols::initPhase1_name(),
vmSymbols::void_method_signature(), CHECK);
}
--- 3384,3394 ----
//
// System.initPhase1 initializes the system properties, the static
// fields in, out, and err. Set up java signal handlers, OS-specific
// system settings, and thread group of the main thread.
static void call_initPhase1(TRAPS) {
! Klass* klass = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
JavaValue result(T_VOID);
JavaCalls::call_static(&result, klass, vmSymbols::initPhase1_name(),
vmSymbols::void_method_signature(), CHECK);
}
*** 3408,3419 ****
//
// After phase 2, The VM will begin search classes from -Xbootclasspath/a.
static void call_initPhase2(TRAPS) {
TraceTime timer("Phase2 initialization", TRACETIME_LOG(Info, modules, startuptime));
! Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
! instanceKlassHandle klass (THREAD, k);
JavaValue result(T_VOID);
JavaCalls::call_static(&result, klass, vmSymbols::initPhase2_name(),
vmSymbols::void_method_signature(), CHECK);
universe_post_module_init();
--- 3404,3414 ----
//
// After phase 2, The VM will begin search classes from -Xbootclasspath/a.
static void call_initPhase2(TRAPS) {
TraceTime timer("Phase2 initialization", TRACETIME_LOG(Info, modules, startuptime));
! Klass* klass = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
JavaValue result(T_VOID);
JavaCalls::call_static(&result, klass, vmSymbols::initPhase2_name(),
vmSymbols::void_method_signature(), CHECK);
universe_post_module_init();
*** 3424,3436 ****
// This will instantiate and set the security manager, set the system class
// loader as well as the thread context class loader. The security manager
// and system class loader may be a custom class loaded from -Xbootclasspath/a,
// other modules or the application's classpath.
static void call_initPhase3(TRAPS) {
! Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
! instanceKlassHandle klass (THREAD, k);
!
JavaValue result(T_VOID);
JavaCalls::call_static(&result, klass, vmSymbols::initPhase3_name(),
vmSymbols::void_method_signature(), CHECK);
}
--- 3419,3429 ----
// This will instantiate and set the security manager, set the system class
// loader as well as the thread context class loader. The security manager
// and system class loader may be a custom class loaded from -Xbootclasspath/a,
// other modules or the application's classpath.
static void call_initPhase3(TRAPS) {
! Klass* klass = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
JavaValue result(T_VOID);
JavaCalls::call_static(&result, klass, vmSymbols::initPhase3_name(),
vmSymbols::void_method_signature(), CHECK);
}
*** 4062,4083 ****
if (this->has_pending_exception()) {
this->clear_pending_exception();
}
EXCEPTION_MARK;
! Klass* k =
SystemDictionary::resolve_or_null(vmSymbols::java_lang_Shutdown(),
THREAD);
! if (k != NULL) {
// SystemDictionary::resolve_or_null will return null if there was
// an exception. If we cannot load the Shutdown class, just don't
// call Shutdown.shutdown() at all. This will mean the shutdown hooks
// and finalizers (if runFinalizersOnExit is set) won't be run.
// Note that if a shutdown hook was registered or runFinalizersOnExit
// was called, the Shutdown class would have already been loaded
// (Runtime.addShutdownHook and runFinalizersOnExit will load it).
- instanceKlassHandle shutdown_klass (THREAD, k);
JavaValue result(T_VOID);
JavaCalls::call_static(&result,
shutdown_klass,
vmSymbols::shutdown_method_name(),
vmSymbols::void_method_signature(),
--- 4055,4075 ----
if (this->has_pending_exception()) {
this->clear_pending_exception();
}
EXCEPTION_MARK;
! Klass* shutdown_klass =
SystemDictionary::resolve_or_null(vmSymbols::java_lang_Shutdown(),
THREAD);
! if (shutdown_klass != NULL) {
// SystemDictionary::resolve_or_null will return null if there was
// an exception. If we cannot load the Shutdown class, just don't
// call Shutdown.shutdown() at all. This will mean the shutdown hooks
// and finalizers (if runFinalizersOnExit is set) won't be run.
// Note that if a shutdown hook was registered or runFinalizersOnExit
// was called, the Shutdown class would have already been loaded
// (Runtime.addShutdownHook and runFinalizersOnExit will load it).
JavaValue result(T_VOID);
JavaCalls::call_static(&result,
shutdown_klass,
vmSymbols::shutdown_method_name(),
vmSymbols::void_method_signature(),
< prev index next >