Merge
authorcoleenp
Tue, 07 May 2013 18:46:47 -0700
changeset 17360 863fe5b015b0
parent 17313 49fdddea1619 (current diff)
parent 17359 a64bf92e907f (diff)
child 17361 c05f257362ac
child 17362 d30ac6d6d655
Merge
--- a/hotspot/src/share/vm/code/nmethod.cpp	Tue May 07 14:30:11 2013 -0700
+++ b/hotspot/src/share/vm/code/nmethod.cpp	Tue May 07 18:46:47 2013 -0700
@@ -1794,6 +1794,19 @@
           Metadata* md = r->metadata_value();
           f(md);
         }
+      } else if (iter.type() == relocInfo::virtual_call_type) {
+        // Check compiledIC holders associated with this nmethod
+        CompiledIC *ic = CompiledIC_at(iter.reloc());
+        if (ic->is_icholder_call()) {
+          CompiledICHolder* cichk = ic->cached_icholder();
+          f(cichk->holder_method());
+          f(cichk->holder_klass());
+        } else {
+          Metadata* ic_oop = ic->cached_metadata();
+          if (ic_oop != NULL) {
+            f(ic_oop);
+          }
+        }
       }
     }
   }
@@ -1804,6 +1817,7 @@
     Metadata* md = *p;
     f(md);
   }
+
   // Call function Method*, not embedded in these other places.
   if (_method != NULL) f(_method);
 }
--- a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp	Tue May 07 14:30:11 2013 -0700
+++ b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp	Tue May 07 18:46:47 2013 -0700
@@ -3366,6 +3366,10 @@
   }
 #endif
 
+  // NULL out in scratch class to not delete twice.  The class to be redefined
+  // always owns these bytes.
+  scratch_class->set_cached_class_file(NULL, 0);
+
   // Replace inner_classes
   Array<u2>* old_inner_classes = the_class->inner_classes();
   the_class->set_inner_classes(scratch_class->inner_classes());