858 int os_prio; |
858 int os_prio; |
859 if (os::get_native_priority(this, &os_prio) == OS_OK) { |
859 if (os::get_native_priority(this, &os_prio) == OS_OK) { |
860 st->print("os_prio=%d ", os_prio); |
860 st->print("os_prio=%d ", os_prio); |
861 } |
861 } |
862 st->print("tid=" INTPTR_FORMAT " ", this); |
862 st->print("tid=" INTPTR_FORMAT " ", this); |
|
863 ext().print_on(st); |
863 osthread()->print_on(st); |
864 osthread()->print_on(st); |
864 } |
865 } |
865 debug_only(if (WizardMode) print_owned_locks_on(st);) |
866 debug_only(if (WizardMode) print_owned_locks_on(st);) |
866 } |
867 } |
867 |
868 |
3019 } |
3020 } |
3020 |
3021 |
3021 // Push the Java priority down to the native thread; needs Threads_lock |
3022 // Push the Java priority down to the native thread; needs Threads_lock |
3022 Thread::set_priority(this, prio); |
3023 Thread::set_priority(this, prio); |
3023 |
3024 |
|
3025 prepare_ext(); |
|
3026 |
3024 // Add the new thread to the Threads list and set it in motion. |
3027 // Add the new thread to the Threads list and set it in motion. |
3025 // We must have threads lock in order to call Threads::add. |
3028 // We must have threads lock in order to call Threads::add. |
3026 // It is crucial that we do not block before the thread is |
3029 // It is crucial that we do not block before the thread is |
3027 // added to the Threads list for if a GC happens, then the java_thread oop |
3030 // added to the Threads list for if a GC happens, then the java_thread oop |
3028 // will not be visited by GC. |
3031 // will not be visited by GC. |
3872 } else { |
3875 } else { |
3873 vm_exit_during_initialization("Could not find JVM_OnLoad function in -Xrun library", agent->name()); |
3876 vm_exit_during_initialization("Could not find JVM_OnLoad function in -Xrun library", agent->name()); |
3874 } |
3877 } |
3875 } |
3878 } |
3876 } |
3879 } |
|
3880 |
|
3881 JavaThread* Threads::find_java_thread_from_java_tid(jlong java_tid) { |
|
3882 assert(Threads_lock->owned_by_self(), "Must hold Threads_lock"); |
|
3883 |
|
3884 JavaThread* java_thread = NULL; |
|
3885 // Sequential search for now. Need to do better optimization later. |
|
3886 for (JavaThread* thread = Threads::first(); thread != NULL; thread = thread->next()) { |
|
3887 oop tobj = thread->threadObj(); |
|
3888 if (!thread->is_exiting() && |
|
3889 tobj != NULL && |
|
3890 java_tid == java_lang_Thread::thread_id(tobj)) { |
|
3891 java_thread = thread; |
|
3892 break; |
|
3893 } |
|
3894 } |
|
3895 return java_thread; |
|
3896 } |
|
3897 |
3877 |
3898 |
3878 // Last thread running calls java.lang.Shutdown.shutdown() |
3899 // Last thread running calls java.lang.Shutdown.shutdown() |
3879 void JavaThread::invoke_shutdown_hooks() { |
3900 void JavaThread::invoke_shutdown_hooks() { |
3880 HandleMark hm(this); |
3901 HandleMark hm(this); |
3881 |
3902 |