# HG changeset patch # User coleenp # Date 1267560580 28800 # Node ID c8a467bf56ad20ab6953ba4b9f2cc88e0feac13f # Parent 8911d8c0596f9723e3e7a37aad3e318d1cdbc648 6914050: jvm assertion "guard pages must be in use" in -Xcomp mode Summary: Move creating stack guard pages in jni attach thread before potential java call rather than after. Also cleanup stack guard pages when jni attach fails Reviewed-by: never, dholmes diff -r 8911d8c0596f -r c8a467bf56ad src/share/vm/prims/jni.cpp --- a/src/share/vm/prims/jni.cpp Fri Feb 26 16:40:55 2010 -0500 +++ b/src/share/vm/prims/jni.cpp Tue Mar 02 12:09:40 2010 -0800 @@ -3401,12 +3401,16 @@ thread->set_thread_state(_thread_in_vm); // Must do this before initialize_thread_local_storage thread->record_stack_base_and_size(); + thread->initialize_thread_local_storage(); if (!os::create_attached_thread(thread)) { delete thread; return JNI_ERR; } + // Enable stack overflow checks + thread->create_stack_guard_pages(); + thread->initialize_tlab(); // Crucial that we do not have a safepoint check for this thread, since it has @@ -3452,9 +3456,6 @@ // to regrab the threads_lock thread->set_attached(); - // Enable stack overflow checks - thread->create_stack_guard_pages(); - // Set java thread status. java_lang_Thread::set_thread_status(thread->threadObj(), java_lang_Thread::RUNNABLE); diff -r 8911d8c0596f -r c8a467bf56ad src/share/vm/runtime/thread.cpp --- a/src/share/vm/runtime/thread.cpp Fri Feb 26 16:40:55 2010 -0500 +++ b/src/share/vm/runtime/thread.cpp Tue Mar 02 12:09:40 2010 -0800 @@ -1637,6 +1637,9 @@ JNIHandleBlock::release_block(block); } + // These have to be removed while this is still a valid thread. + remove_stack_guard_pages(); + if (UseTLAB) { tlab().make_parsable(true); // retire TLAB, if any }