equal
deleted
inserted
replaced
3559 *X = (JavaThread*)prefetch_and_load_ptr((void**)MACRO_current_p, (intx)MACRO_scan_interval); \ |
3559 *X = (JavaThread*)prefetch_and_load_ptr((void**)MACRO_current_p, (intx)MACRO_scan_interval); \ |
3560 MACRO_current_p != MACRO_end; \ |
3560 MACRO_current_p != MACRO_end; \ |
3561 MACRO_current_p++, \ |
3561 MACRO_current_p++, \ |
3562 X = (JavaThread*)prefetch_and_load_ptr((void**)MACRO_current_p, (intx)MACRO_scan_interval)) |
3562 X = (JavaThread*)prefetch_and_load_ptr((void**)MACRO_current_p, (intx)MACRO_scan_interval)) |
3563 |
3563 |
|
3564 inline ThreadsList* Threads::get_smr_java_thread_list() { |
|
3565 return (ThreadsList*)OrderAccess::load_acquire(&_smr_java_thread_list); |
|
3566 } |
|
3567 |
3564 // All JavaThreads |
3568 // All JavaThreads |
3565 #define ALL_JAVA_THREADS(X) DO_JAVA_THREADS(get_smr_java_thread_list(), X) |
3569 #define ALL_JAVA_THREADS(X) DO_JAVA_THREADS(get_smr_java_thread_list(), X) |
3566 |
3570 |
3567 // All JavaThreads + all non-JavaThreads (i.e., every thread in the system) |
3571 // All JavaThreads + all non-JavaThreads (i.e., every thread in the system) |
3568 void Threads::threads_do(ThreadClosure* tc) { |
3572 void Threads::threads_do(ThreadClosure* tc) { |
3770 log_debug(thread, smr)("tid=" UINTX_FORMAT ": Threads::acquire_stable_list: add NestedThreadsList node containing ThreadsList=" INTPTR_FORMAT, os::current_thread_id(), p2i(node->t_list())); |
3774 log_debug(thread, smr)("tid=" UINTX_FORMAT ": Threads::acquire_stable_list: add NestedThreadsList node containing ThreadsList=" INTPTR_FORMAT, os::current_thread_id(), p2i(node->t_list())); |
3771 |
3775 |
3772 return node->t_list(); |
3776 return node->t_list(); |
3773 } |
3777 } |
3774 |
3778 |
|
3779 inline void Threads::add_smr_deleted_thread_times(uint add_value) { |
|
3780 Atomic::add(add_value, &_smr_deleted_thread_times); |
|
3781 } |
|
3782 |
|
3783 inline void Threads::inc_smr_deleted_thread_cnt() { |
|
3784 Atomic::inc(&_smr_deleted_thread_cnt); |
|
3785 } |
|
3786 |
3775 // Release a stable ThreadsList. |
3787 // Release a stable ThreadsList. |
3776 // |
3788 // |
3777 void Threads::release_stable_list(Thread *self) { |
3789 void Threads::release_stable_list(Thread *self) { |
3778 assert(self != NULL, "sanity check"); |
3790 assert(self != NULL, "sanity check"); |
3779 // release_stable_list_nested_path() will grab the Threads_lock |
3791 // release_stable_list_nested_path() will grab the Threads_lock |
3867 // Notify any exiting JavaThreads that are waiting in smr_delete() |
3879 // Notify any exiting JavaThreads that are waiting in smr_delete() |
3868 // that we've released a ThreadsList. |
3880 // that we've released a ThreadsList. |
3869 ml.notify_all(); |
3881 ml.notify_all(); |
3870 log_debug(thread, smr)("tid=" UINTX_FORMAT ": Threads::release_stable_list notified %s", os::current_thread_id(), log_str); |
3882 log_debug(thread, smr)("tid=" UINTX_FORMAT ": Threads::release_stable_list notified %s", os::current_thread_id(), log_str); |
3871 } |
3883 } |
|
3884 } |
|
3885 |
|
3886 inline void Threads::update_smr_deleted_thread_time_max(uint new_value) { |
|
3887 while (true) { |
|
3888 uint cur_value = _smr_deleted_thread_time_max; |
|
3889 if (new_value <= cur_value) { |
|
3890 // No need to update max value so we're done. |
|
3891 break; |
|
3892 } |
|
3893 if (Atomic::cmpxchg(new_value, &_smr_deleted_thread_time_max, cur_value) == cur_value) { |
|
3894 // Updated max value so we're done. Otherwise try it all again. |
|
3895 break; |
|
3896 } |
|
3897 } |
|
3898 } |
|
3899 |
|
3900 inline ThreadsList* Threads::xchg_smr_java_thread_list(ThreadsList* new_list) { |
|
3901 return (ThreadsList*)Atomic::xchg(new_list, &_smr_java_thread_list); |
3872 } |
3902 } |
3873 |
3903 |
3874 void Threads::initialize_java_lang_classes(JavaThread* main_thread, TRAPS) { |
3904 void Threads::initialize_java_lang_classes(JavaThread* main_thread, TRAPS) { |
3875 TraceTime timer("Initialize java.lang classes", TRACETIME_LOG(Info, startuptime)); |
3905 TraceTime timer("Initialize java.lang classes", TRACETIME_LOG(Info, startuptime)); |
3876 |
3906 |