Mercurial > hg > truffle
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 |