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
--- 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;