hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp
changeset 19960 49697a1e3782
parent 19537 7db00fe9bb8e
child 19961 04405a08613f
equal deleted inserted replaced
19957:04a38bb9ba15 19960:49697a1e3782
  1588 
  1588 
  1589   // rewrite constant pool references in the methods:
  1589   // rewrite constant pool references in the methods:
  1590   for (int i = methods->length() - 1; i >= 0; i--) {
  1590   for (int i = methods->length() - 1; i >= 0; i--) {
  1591     methodHandle method(THREAD, methods->at(i));
  1591     methodHandle method(THREAD, methods->at(i));
  1592     methodHandle new_method;
  1592     methodHandle new_method;
  1593     rewrite_cp_refs_in_method(method, &new_method, CHECK_false);
  1593     rewrite_cp_refs_in_method(method, &new_method, THREAD);
  1594     if (!new_method.is_null()) {
  1594     if (!new_method.is_null()) {
  1595       // the method has been replaced so save the new method version
  1595       // the method has been replaced so save the new method version
       
  1596       // even in the case of an exception.  original method is on the
       
  1597       // deallocation list.
  1596       methods->at_put(i, new_method());
  1598       methods->at_put(i, new_method());
       
  1599     }
       
  1600     if (HAS_PENDING_EXCEPTION) {
       
  1601       Symbol* ex_name = PENDING_EXCEPTION->klass()->name();
       
  1602       // RC_TRACE_WITH_THREAD macro has an embedded ResourceMark
       
  1603       RC_TRACE_WITH_THREAD(0x00000002, THREAD,
       
  1604         ("rewrite_cp_refs_in_method exception: '%s'", ex_name->as_C_string()));
       
  1605       // Need to clear pending exception here as the super caller sets
       
  1606       // the JVMTI_ERROR_INTERNAL if the returned value is false.
       
  1607       CLEAR_PENDING_EXCEPTION;
       
  1608       return false;
  1597     }
  1609     }
  1598   }
  1610   }
  1599 
  1611 
  1600   return true;
  1612   return true;
  1601 }
  1613 }
  1672             methodHandle m;
  1684             methodHandle m;
  1673             {
  1685             {
  1674               Pause_No_Safepoint_Verifier pnsv(&nsv);
  1686               Pause_No_Safepoint_Verifier pnsv(&nsv);
  1675 
  1687 
  1676               // ldc is 2 bytes and ldc_w is 3 bytes
  1688               // ldc is 2 bytes and ldc_w is 3 bytes
  1677               m = rc.insert_space_at(bci, 3, inst_buffer, THREAD);
  1689               m = rc.insert_space_at(bci, 3, inst_buffer, CHECK);
  1678               if (m.is_null() || HAS_PENDING_EXCEPTION) {
       
  1679                 guarantee(false, "insert_space_at() failed");
       
  1680               }
       
  1681             }
  1690             }
  1682 
  1691 
  1683             // return the new method so that the caller can update
  1692             // return the new method so that the caller can update
  1684             // the containing class
  1693             // the containing class
  1685             *new_method_p = method = m;
  1694             *new_method_p = method = m;