< prev index next >
src/hotspot/share/runtime/vm_operations.cpp
Print this page
rev 49294 : imported patch 8199813
rev 49295 : Move IdealGraphPrinter::clean_up() call so VM_Exit::set_shutdown_thread() can be removed.
@@ -418,16 +418,18 @@
volatile bool VM_Exit::_vm_exited = false;
Thread * volatile VM_Exit::_shutdown_thread = NULL;
int VM_Exit::set_vm_exited() {
+
Thread * thr_cur = Thread::current();
- assert(_shutdown_thread == thr_cur, "_shutdown_thread should be current thread");
+
assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint already");
int num_active = 0;
+ _shutdown_thread = thr_cur;
_vm_exited = true; // global flag
for (JavaThreadIteratorWithHandle jtiwh; JavaThread *thr = jtiwh.next(); ) {
if (thr!=thr_cur && thr->thread_state() == _thread_in_native) {
++num_active;
thr->set_terminated(JavaThread::_vm_exited); // per-thread flag
@@ -498,15 +500,10 @@
// native==>Java/VM barriers.
// Among 16276 JCK tests, 94% of them come here without any threads still
// running in native; the other 6% are quiescent within 250ms (Ultra 80).
wait_for_threads_in_native_to_block();
- // Remember the Thread that is shutting down the VM because it needs
- // to be immune to some of the sanity checks and policies that have
- // to happen at VM shutdown time.
- VM_Exit::set_shutdown_thread(Thread::current());
-
set_vm_exited();
// cleanup globals resources before exiting. exit_globals() currently
// cleans up outputStream resources and PerfMemory resources.
exit_globals();
< prev index next >