comparison src/share/vm/runtime/thread.cpp @ 12880:469216acdb28

8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash Summary: Ensure ensure correct initialization of compiler runtime Reviewed-by: kvn, twisti
author anoll
date Thu, 10 Oct 2013 15:44:12 +0200
parents 190899198332
children 292050e5d5ea
comparison
equal deleted inserted replaced
12876:8b80b262e501 12880:469216acdb28
1452 _should_post_on_exceptions_flag = JNI_FALSE; 1452 _should_post_on_exceptions_flag = JNI_FALSE;
1453 _jvmti_get_loaded_classes_closure = NULL; 1453 _jvmti_get_loaded_classes_closure = NULL;
1454 _interp_only_mode = 0; 1454 _interp_only_mode = 0;
1455 _special_runtime_exit_condition = _no_async_condition; 1455 _special_runtime_exit_condition = _no_async_condition;
1456 _pending_async_exception = NULL; 1456 _pending_async_exception = NULL;
1457 _is_compiling = false;
1458 _thread_stat = NULL; 1457 _thread_stat = NULL;
1459 _thread_stat = new ThreadStatistics(); 1458 _thread_stat = new ThreadStatistics();
1460 _blocked_on_compilation = false; 1459 _blocked_on_compilation = false;
1461 _jni_active_critical = 0; 1460 _jni_active_critical = 0;
1462 _do_not_unlock_if_synchronized = false; 1461 _do_not_unlock_if_synchronized = false;
1813 EVENT_THREAD_EXIT(this); 1812 EVENT_THREAD_EXIT(this);
1814 1813
1815 // Call Thread.exit(). We try 3 times in case we got another Thread.stop during 1814 // Call Thread.exit(). We try 3 times in case we got another Thread.stop during
1816 // the execution of the method. If that is not enough, then we don't really care. Thread.stop 1815 // the execution of the method. If that is not enough, then we don't really care. Thread.stop
1817 // is deprecated anyhow. 1816 // is deprecated anyhow.
1818 { int count = 3; 1817 if (!is_Compiler_thread()) {
1818 int count = 3;
1819 while (java_lang_Thread::threadGroup(threadObj()) != NULL && (count-- > 0)) { 1819 while (java_lang_Thread::threadGroup(threadObj()) != NULL && (count-- > 0)) {
1820 EXCEPTION_MARK; 1820 EXCEPTION_MARK;
1821 JavaValue result(T_VOID); 1821 JavaValue result(T_VOID);
1822 KlassHandle thread_klass(THREAD, SystemDictionary::Thread_klass()); 1822 KlassHandle thread_klass(THREAD, SystemDictionary::Thread_klass());
1823 JavaCalls::call_virtual(&result, 1823 JavaCalls::call_virtual(&result,
1826 vmSymbols::void_method_signature(), 1826 vmSymbols::void_method_signature(),
1827 THREAD); 1827 THREAD);
1828 CLEAR_PENDING_EXCEPTION; 1828 CLEAR_PENDING_EXCEPTION;
1829 } 1829 }
1830 } 1830 }
1831
1832 // notify JVMTI 1831 // notify JVMTI
1833 if (JvmtiExport::should_post_thread_life()) { 1832 if (JvmtiExport::should_post_thread_life()) {
1834 JvmtiExport::post_thread_end(this); 1833 JvmtiExport::post_thread_end(this);
1835 } 1834 }
1836 1835
3237 _task = NULL; 3236 _task = NULL;
3238 _queue = queue; 3237 _queue = queue;
3239 _counters = counters; 3238 _counters = counters;
3240 _buffer_blob = NULL; 3239 _buffer_blob = NULL;
3241 _scanned_nmethod = NULL; 3240 _scanned_nmethod = NULL;
3241 _compiler = NULL;
3242 3242
3243 #ifndef PRODUCT 3243 #ifndef PRODUCT
3244 _ideal_graph_printer = NULL; 3244 _ideal_graph_printer = NULL;
3245 #endif 3245 #endif
3246 } 3246 }
3252 // process it here to make sure it isn't unloaded in the middle of 3252 // process it here to make sure it isn't unloaded in the middle of
3253 // a scan. 3253 // a scan.
3254 cf->do_code_blob(_scanned_nmethod); 3254 cf->do_code_blob(_scanned_nmethod);
3255 } 3255 }
3256 } 3256 }
3257
3257 3258
3258 // ======= Threads ======== 3259 // ======= Threads ========
3259 3260
3260 // The Threads class links together all active threads, and provides 3261 // The Threads class links together all active threads, and provides
3261 // operations over all threads. It is protected by its own Mutex 3262 // operations over all threads. It is protected by its own Mutex
3272 bool Threads::_vm_complete = false; 3273 bool Threads::_vm_complete = false;
3273 #endif 3274 #endif
3274 3275
3275 // All JavaThreads 3276 // All JavaThreads
3276 #define ALL_JAVA_THREADS(X) for (JavaThread* X = _thread_list; X; X = X->next()) 3277 #define ALL_JAVA_THREADS(X) for (JavaThread* X = _thread_list; X; X = X->next())
3277
3278 void os_stream();
3279 3278
3280 // All JavaThreads + all non-JavaThreads (i.e., every thread in the system) 3279 // All JavaThreads + all non-JavaThreads (i.e., every thread in the system)
3281 void Threads::threads_do(ThreadClosure* tc) { 3280 void Threads::threads_do(ThreadClosure* tc) {
3282 assert_locked_or_safepoint(Threads_lock); 3281 assert_locked_or_safepoint(Threads_lock);
3283 // ALL_JAVA_THREADS iterates through all JavaThreads 3282 // ALL_JAVA_THREADS iterates through all JavaThreads