diff src/share/vm/oops/instanceKlass.cpp @ 14860:8762b6b8fbb6

fix scanning of method data for redefined methods
author Tom Rodriguez <tom.rodriguez@oracle.com>
date Thu, 27 Mar 2014 13:11:17 -0700
parents d8041d695d19
children 4ca6dc0799b6
line wrap: on
line diff
--- a/src/share/vm/oops/instanceKlass.cpp	Thu Mar 27 18:35:55 2014 +0100
+++ b/src/share/vm/oops/instanceKlass.cpp	Thu Mar 27 13:11:17 2014 -0700
@@ -3411,6 +3411,10 @@
               ("purge: %s(%s): prev method @%d in version @%d is alive",
               method->name()->as_C_string(),
               method->signature()->as_C_string(), j, i));
+            if (method->method_data() != NULL) {
+              // Clean out any weak method links
+              method->method_data()->clean_weak_method_links();
+            }
           }
         }
       }
@@ -3420,6 +3424,14 @@
       ("purge: previous version stats: live=%d, deleted=%d", live_count,
       deleted_count));
   }
+
+  Array<Method*>* methods = ik->methods();
+  int num_methods = methods->length();
+  for (int index2 = 0; index2 < num_methods; ++index2) {
+    if (methods->at(index2)->method_data() != NULL) {
+      methods->at(index2)->method_data()->clean_weak_method_links();
+    }
+  }
 }
 
 // External interface for use during class unloading.