< prev index next >

test/hotspot/jtreg/runtime/RedefineTests/RedefinePreviousVersions.java

Print this page
rev 50289 : [mq]: jep181-rev5

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.

@@ -21,11 +21,11 @@
  * questions.
  */
 
 /*
  * @test
- * @bug 8165246
+ * @bug 8165246 8010319
  * @summary Test has_previous_versions flag and processing during class unloading.
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  * @modules java.compiler
  *          java.instrument

@@ -35,42 +35,47 @@
  */
 
 import jdk.test.lib.process.ProcessTools;
 import jdk.test.lib.process.OutputAnalyzer;
 
+// package access top-level classes to avoid problem with RedefineClassHelper
+// and nested types.
+
+class RedefinePreviousVersions_B { }
+
+class RedefinePreviousVersions_Running {
+    public static volatile boolean stop = false;
+    public static volatile boolean running = false;
+    static void localSleep() {
+        try {
+            Thread.sleep(10); // sleep for 10 ms
+        } catch(InterruptedException ie) {
+        }
+    }
+
+    public static void infinite() {
+        running = true;
+        while (!stop) { localSleep(); }
+    }
+}
+
+
+
 public class RedefinePreviousVersions {
 
     public static String newB =
-                "class RedefinePreviousVersions$B {" +
+                "class RedefinePreviousVersions_B {" +
                 "}";
 
-    static class B { }
-
     public static String newRunning =
-        "class RedefinePreviousVersions$Running {" +
+        "class RedefinePreviousVersions_Running {" +
         "    public static volatile boolean stop = true;" +
         "    public static volatile boolean running = true;" +
         "    static void localSleep() { }" +
         "    public static void infinite() { }" +
         "}";
 
-    static class Running {
-        public static volatile boolean stop = false;
-        public static volatile boolean running = false;
-        static void localSleep() {
-          try{
-            Thread.sleep(10); // sleep for 10 ms
-          } catch(InterruptedException ie) {
-          }
-        }
-
-        public static void infinite() {
-            running = true;
-            while (!stop) { localSleep(); }
-        }
-    }
-
     public static void main(String[] args) throws Exception {
 
         if (args.length > 0) {
 
             // java -javaagent:redefineagent.jar -Xlog:stuff RedefinePreviousVersions

@@ -85,39 +90,39 @@
         }
 
         // Redefine a class and create some garbage
         // Since there are no methods running, the previous version is never added to the
         // previous_version_list and the flag _has_previous_versions should stay false
-        RedefineClassHelper.redefineClass(B.class, newB);
+        RedefineClassHelper.redefineClass(RedefinePreviousVersions_B.class, newB);
 
         for (int i = 0; i < 10 ; i++) {
             String s = new String("some garbage");
             System.gc();
         }
 
         // Start a class that has a method running
         new Thread() {
             public void run() {
-                Running.infinite();
+                RedefinePreviousVersions_Running.infinite();
             }
         }.start();
 
-        while (!Running.running) {
+        while (!RedefinePreviousVersions_Running.running) {
             Thread.sleep(10); // sleep for 10 ms
         }
 
         // Since a method of newRunning is running, this class should be added to the previous_version_list
         // of Running, and _has_previous_versions should return true at class unloading.
-        RedefineClassHelper.redefineClass(Running.class, newRunning);
+        RedefineClassHelper.redefineClass(RedefinePreviousVersions_Running.class, newRunning);
 
         for (int i = 0; i < 10 ; i++) {
             String s = new String("some garbage");
             System.gc();
         }
 
         // purge should clean everything up, except Xcomp it might not.
-        Running.stop = true;
+        RedefinePreviousVersions_Running.stop = true;
 
         for (int i = 0; i < 10 ; i++) {
             String s = new String("some garbage");
             System.gc();
         }
< prev index next >