hotspot/src/share/vm/oops/instanceKlass.cpp
changeset 23845 ebd1fafcc362
parent 23515 f4872ef5df09
child 23873 dc33274a6248
--- a/hotspot/src/share/vm/oops/instanceKlass.cpp	Thu Apr 03 12:37:53 2014 +0200
+++ b/hotspot/src/share/vm/oops/instanceKlass.cpp	Tue Apr 08 09:51:25 2014 +0200
@@ -3409,6 +3409,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();
+            }
           }
         }
       }
@@ -3418,6 +3422,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.