test/hotspot/jtreg/runtime/MemberName/MemberNameLeak.java
changeset 51567 0c4f2b26849e
parent 50455 2b73cce96dce
child 51700 0fa33d4e721e
--- a/test/hotspot/jtreg/runtime/MemberName/MemberNameLeak.java	Wed Aug 22 10:29:17 2018 +0200
+++ b/test/hotspot/jtreg/runtime/MemberName/MemberNameLeak.java	Wed Aug 29 10:46:59 2018 -0400
@@ -34,7 +34,7 @@
 import java.lang.invoke.*;
 import jdk.test.lib.process.OutputAnalyzer;
 import jdk.test.lib.process.ProcessTools;
-
+import sun.hotspot.WhiteBox;
 import sun.hotspot.code.Compiler;
 
 public class MemberNameLeak {
@@ -44,6 +44,9 @@
 
       public static void main(String[] args) throws Throwable {
         Leak leak = new Leak();
+        WhiteBox wb = WhiteBox.getWhiteBox();
+        int removedCountOrig =  wb.resolvedMethodRemovedCount();
+        int removedCount;
 
         for (int i = 0; i < 10; i++) {
           MethodHandles.Lookup lookup = MethodHandles.lookup();
@@ -54,6 +57,11 @@
         }
 
         System.gc();  // make mh unused
+
+        // Wait until ServiceThread cleans ResolvedMethod table
+        do {
+          removedCount = wb.resolvedMethodRemovedCount();
+        } while (removedCountOrig == removedCount);
       }
     }
 
@@ -61,6 +69,8 @@
        // Run this Leak class with logging
         ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
                                       "-Xlog:membername+table=trace",
+                                      "-XX:+WhiteBoxAPI",
+                                      "-Xbootclasspath/a:.",
                                       gc, Leak.class.getName());
         OutputAnalyzer output = new OutputAnalyzer(pb.start());
         output.shouldContain("ResolvedMethod entry added for MemberNameLeak$Leak.callMe()V");