456 // Initialize thread_oop to put it into the system threadGroup 457 Handle thread_group (THREAD, Universe::system_thread_group()); 458 JavaValue result(T_VOID); 459 JavaCalls::call_special(&result, thread_oop, 460 ik, 461 vmSymbols::object_initializer_name(), 462 vmSymbols::threadgroup_string_void_signature(), 463 thread_group, 464 string, 465 CHECK); 466 467 Klass* group = SystemDictionary::ThreadGroup_klass(); 468 JavaCalls::call_special(&result, 469 thread_group, 470 group, 471 vmSymbols::add_method_name(), 472 vmSymbols::thread_void_signature(), 473 thread_oop, // ARG 1 474 CHECK); 475 476 os::signal_init_pd(); 477 478 { MutexLocker mu(Threads_lock); 479 JavaThread* signal_thread = new JavaThread(&signal_thread_entry); 480 481 // At this point it may be possible that no osthread was created for the 482 // JavaThread due to lack of memory. We would have to throw an exception 483 // in that case. However, since this must work and we do not allow 484 // exceptions anyway, check and abort if this fails. 485 if (signal_thread == NULL || signal_thread->osthread() == NULL) { 486 vm_exit_during_initialization("java.lang.OutOfMemoryError", 487 os::native_thread_creation_failed_msg()); 488 } 489 490 java_lang_Thread::set_thread(thread_oop(), signal_thread); 491 java_lang_Thread::set_priority(thread_oop(), NearMaxPriority); 492 java_lang_Thread::set_daemon(thread_oop()); 493 494 signal_thread->set_threadObj(thread_oop()); 495 Threads::add(signal_thread); 496 Thread::start(signal_thread); 497 } | 456 // Initialize thread_oop to put it into the system threadGroup 457 Handle thread_group (THREAD, Universe::system_thread_group()); 458 JavaValue result(T_VOID); 459 JavaCalls::call_special(&result, thread_oop, 460 ik, 461 vmSymbols::object_initializer_name(), 462 vmSymbols::threadgroup_string_void_signature(), 463 thread_group, 464 string, 465 CHECK); 466 467 Klass* group = SystemDictionary::ThreadGroup_klass(); 468 JavaCalls::call_special(&result, 469 thread_group, 470 group, 471 vmSymbols::add_method_name(), 472 vmSymbols::thread_void_signature(), 473 thread_oop, // ARG 1 474 CHECK); 475 476 { MutexLocker mu(Threads_lock); 477 JavaThread* signal_thread = new JavaThread(&signal_thread_entry); 478 479 // At this point it may be possible that no osthread was created for the 480 // JavaThread due to lack of memory. We would have to throw an exception 481 // in that case. However, since this must work and we do not allow 482 // exceptions anyway, check and abort if this fails. 483 if (signal_thread == NULL || signal_thread->osthread() == NULL) { 484 vm_exit_during_initialization("java.lang.OutOfMemoryError", 485 os::native_thread_creation_failed_msg()); 486 } 487 488 java_lang_Thread::set_thread(thread_oop(), signal_thread); 489 java_lang_Thread::set_priority(thread_oop(), NearMaxPriority); 490 java_lang_Thread::set_daemon(thread_oop()); 491 492 signal_thread->set_threadObj(thread_oop()); 493 Threads::add(signal_thread); 494 Thread::start(signal_thread); 495 } |