# HG changeset patch # User zgu # Date 1388498288 18000 # Node ID fd0ca2c1433bb7924cae416402176bb4c3839741 # Parent 9d85c3e90648a2d4de4b40a8739ed54a62cd3d9f 6730115: Fastdebug VM crashes with "ExceptionMark destructor expects no pending exceptions" error Summary: Fixed incompatible uses of EXCEPTION_MARK and CHECK macros in AttachListener::init(), handle exception locally. Reviewed-by: minqi, coleenp diff -r 9d85c3e90648 -r fd0ca2c1433b src/share/vm/services/attachListener.cpp --- a/src/share/vm/services/attachListener.cpp Fri Aug 28 09:57:54 2015 +0200 +++ b/src/share/vm/services/attachListener.cpp Tue Dec 31 08:58:08 2013 -0500 @@ -466,15 +466,39 @@ } } +bool AttachListener::has_init_error(TRAPS) { + if (HAS_PENDING_EXCEPTION) { + tty->print_cr("Exception in VM (AttachListener::init) : "); + java_lang_Throwable::print(PENDING_EXCEPTION, tty); + tty->cr(); + + CLEAR_PENDING_EXCEPTION; + + return true; + } else { + return false; + } +} + // Starts the Attach Listener thread void AttachListener::init() { EXCEPTION_MARK; - Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK); + Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, THREAD); + if (has_init_error(THREAD)) { + return; + } + instanceKlassHandle klass (THREAD, k); - instanceHandle thread_oop = klass->allocate_instance_handle(CHECK); + instanceHandle thread_oop = klass->allocate_instance_handle(THREAD); + if (has_init_error(THREAD)) { + return; + } const char thread_name[] = "Attach Listener"; - Handle string = java_lang_String::create_from_str(thread_name, CHECK); + Handle string = java_lang_String::create_from_str(thread_name, THREAD); + if (has_init_error(THREAD)) { + return; + } // Initialize thread_oop to put it into the system threadGroup Handle thread_group (THREAD, Universe::system_thread_group()); @@ -487,13 +511,7 @@ string, THREAD); - if (HAS_PENDING_EXCEPTION) { - tty->print_cr("Exception in VM (AttachListener::init) : "); - java_lang_Throwable::print(PENDING_EXCEPTION, tty); - tty->cr(); - - CLEAR_PENDING_EXCEPTION; - + if (has_init_error(THREAD)) { return; } @@ -505,14 +523,7 @@ vmSymbols::thread_void_signature(), thread_oop, // ARG 1 THREAD); - - if (HAS_PENDING_EXCEPTION) { - tty->print_cr("Exception in VM (AttachListener::init) : "); - java_lang_Throwable::print(PENDING_EXCEPTION, tty); - tty->cr(); - - CLEAR_PENDING_EXCEPTION; - + if (has_init_error(THREAD)) { return; } diff -r 9d85c3e90648 -r fd0ca2c1433b src/share/vm/services/attachListener.hpp --- a/src/share/vm/services/attachListener.hpp Fri Aug 28 09:57:54 2015 +0200 +++ b/src/share/vm/services/attachListener.hpp Tue Dec 31 08:58:08 2013 -0500 @@ -94,6 +94,9 @@ // dequeue the next operation static AttachOperation* dequeue(); #endif // !INCLUDE_SERVICES + + private: + static bool has_init_error(TRAPS); }; #if INCLUDE_SERVICES