6583275: Hotspot crash in vm_perform_shutdown_actions due to uninitialized TLS during out of memory handling
authorcoleenp
Wed, 05 Jan 2011 21:23:15 -0500
changeset 7720 8283870fc280
parent 7719 ef138e2849eb
child 7721 8fae37350972
6583275: Hotspot crash in vm_perform_shutdown_actions due to uninitialized TLS during out of memory handling Summary: Call get_thread_slow() in vm_perform_shutdown actions and add null check. Reviewed-by: kvn, dholmes, jcoomes
hotspot/src/share/vm/runtime/java.cpp
--- a/hotspot/src/share/vm/runtime/java.cpp	Mon Jan 03 14:09:11 2011 -0500
+++ b/hotspot/src/share/vm/runtime/java.cpp	Wed Jan 05 21:23:15 2011 -0500
@@ -515,8 +515,8 @@
 }
 
 void vm_exit(int code) {
-  Thread* thread = ThreadLocalStorage::thread_index() == -1 ? NULL
-    : ThreadLocalStorage::get_thread_slow();
+  Thread* thread = ThreadLocalStorage::is_initialized() ?
+    ThreadLocalStorage::get_thread_slow() : NULL;
   if (thread == NULL) {
     // we have serious problems -- just exit
     vm_direct_exit(code);
@@ -553,8 +553,9 @@
   // Calling 'exit_globals()' will disable thread-local-storage and cause all
   // kinds of assertions to trigger in debug mode.
   if (is_init_completed()) {
-    Thread* thread = Thread::current();
-    if (thread->is_Java_thread()) {
+    Thread* thread = ThreadLocalStorage::is_initialized() ?
+                     ThreadLocalStorage::get_thread_slow() : NULL;
+    if (thread != NULL && thread->is_Java_thread()) {
       // We are leaving the VM, set state to native (in case any OS exit
       // handlers call back to the VM)
       JavaThread* jt = (JavaThread*)thread;