Fri, 13 Sep 2013 12:48:50 -0700
8024346: ~CautiouslyPreserveExceptionMark - assert(!_thread->has_pending_exception()) failed: unexpected exception generated
Summary: Pending exceptions must be handled properly after a call to the JVMTI merge_cp_and_rewrite
Reviewed-by: coleenp, dholmes
Contributed-by: serguei.spitsyn@oracle.com
src/share/vm/prims/jvmtiRedefineClasses.cpp | file | annotate | diff | comparison | revisions |
1.1 --- a/src/share/vm/prims/jvmtiRedefineClasses.cpp Fri Sep 13 12:47:44 2013 -0700 1.2 +++ b/src/share/vm/prims/jvmtiRedefineClasses.cpp Fri Sep 13 12:48:50 2013 -0700 1.3 @@ -1072,8 +1072,17 @@ 1.4 } 1.5 1.6 res = merge_cp_and_rewrite(the_class, scratch_class, THREAD); 1.7 - if (res != JVMTI_ERROR_NONE) { 1.8 - return res; 1.9 + if (HAS_PENDING_EXCEPTION) { 1.10 + Symbol* ex_name = PENDING_EXCEPTION->klass()->name(); 1.11 + // RC_TRACE_WITH_THREAD macro has an embedded ResourceMark 1.12 + RC_TRACE_WITH_THREAD(0x00000002, THREAD, 1.13 + ("merge_cp_and_rewrite exception: '%s'", ex_name->as_C_string())); 1.14 + CLEAR_PENDING_EXCEPTION; 1.15 + if (ex_name == vmSymbols::java_lang_OutOfMemoryError()) { 1.16 + return JVMTI_ERROR_OUT_OF_MEMORY; 1.17 + } else { 1.18 + return JVMTI_ERROR_INTERNAL; 1.19 + } 1.20 } 1.21 1.22 if (VerifyMergedCPBytecodes) { 1.23 @@ -1105,6 +1114,9 @@ 1.24 } 1.25 if (HAS_PENDING_EXCEPTION) { 1.26 Symbol* ex_name = PENDING_EXCEPTION->klass()->name(); 1.27 + // RC_TRACE_WITH_THREAD macro has an embedded ResourceMark 1.28 + RC_TRACE_WITH_THREAD(0x00000002, THREAD, 1.29 + ("Rewriter::rewrite or link_methods exception: '%s'", ex_name->as_C_string())); 1.30 CLEAR_PENDING_EXCEPTION; 1.31 if (ex_name == vmSymbols::java_lang_OutOfMemoryError()) { 1.32 return JVMTI_ERROR_OUT_OF_MEMORY;