8024346: ~CautiouslyPreserveExceptionMark - assert(!_thread->has_pending_exception()) failed: unexpected exception generated

Fri, 13 Sep 2013 12:48:50 -0700

author
sspitsyn
date
Fri, 13 Sep 2013 12:48:50 -0700
changeset 5677
0d3ff4d36a31
parent 5676
ce5ee9de50ce
child 5678
b135b600a66c

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;

mercurial