< prev index next >

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

Print this page
rev 50608 : imported patch jep181-rev5

*** 21,45 **** * questions. */ /* * @test ! * @bug 8055008 8197901 * @summary Redefine EMCP and non-EMCP methods that are running in an infinite loop * @library /test/lib * @modules java.base/jdk.internal.misc * @modules java.compiler * java.instrument * jdk.jartool/sun.tools.jar * @run main RedefineClassHelper * @run main/othervm -javaagent:redefineagent.jar -Xlog:redefine+class+iklass+add=trace,redefine+class+iklass+purge=trace,all=trace:file=all.log RedefineRunningMethods */ // Test is executed with full trace logging redirected to a file to ensure there is no crash during logging anonymous classes - see JDK-8197901 public class RedefineRunningMethods { public static String newB = ! "class RedefineRunningMethods$B {" + " static int count1 = 0;" + " static int count2 = 0;" + " public static volatile boolean stop = false;" + " static void localSleep() { " + " try{ " + --- 21,68 ---- * questions. */ /* * @test ! * @bug 8055008 8197901 8010319 * @summary Redefine EMCP and non-EMCP methods that are running in an infinite loop * @library /test/lib * @modules java.base/jdk.internal.misc * @modules java.compiler * java.instrument * jdk.jartool/sun.tools.jar * @run main RedefineClassHelper * @run main/othervm -javaagent:redefineagent.jar -Xlog:redefine+class+iklass+add=trace,redefine+class+iklass+purge=trace,all=trace:file=all.log RedefineRunningMethods */ // Test is executed with full trace logging redirected to a file to ensure there is no crash during logging anonymous classes - see JDK-8197901 + + + // package access top-level class to avoid problem with RedefineClassHelper + // and nested types. + class RedefineRunningMethods_B { + static int count1 = 0; + static int count2 = 0; + public static volatile boolean stop = false; + static void localSleep() { + try{ + Thread.currentThread().sleep(10);//sleep for 10 ms + } catch(InterruptedException ie) { + } + } + + public static void infinite() { + while (!stop) { count1++; localSleep(); } + } + public static void infinite_emcp() { + while (!stop) { count2++; localSleep(); } + } + } + public class RedefineRunningMethods { public static String newB = ! "class RedefineRunningMethods_B {" + " static int count1 = 0;" + " static int count2 = 0;" + " public static volatile boolean stop = false;" + " static void localSleep() { " + " try{ " +
*** 54,64 **** " while (!stop) { count2++; localSleep(); }" + " }" + "}"; public static String evenNewerB = ! "class RedefineRunningMethods$B {" + " static int count1 = 0;" + " static int count2 = 0;" + " public static volatile boolean stop = false;" + " static void localSleep() { " + " try{ " + --- 77,87 ---- " while (!stop) { count2++; localSleep(); }" + " }" + "}"; public static String evenNewerB = ! "class RedefineRunningMethods_B {" + " static int count1 = 0;" + " static int count2 = 0;" + " public static volatile boolean stop = false;" + " static void localSleep() { " + " try{ " +
*** 70,147 **** " public static void infinite_emcp() { " + " System.out.println(\"infinite_emcp now obsolete called\");" + " }" + "}"; - static class B { - static int count1 = 0; - static int count2 = 0; - public static volatile boolean stop = false; - static void localSleep() { - try{ - Thread.currentThread().sleep(10);//sleep for 10 ms - } catch(InterruptedException ie) { - } - } - - public static void infinite() { - while (!stop) { count1++; localSleep(); } - } - public static void infinite_emcp() { - while (!stop) { count2++; localSleep(); } - } - } - public static void main(String[] args) throws Exception { new Thread() { public void run() { ! B.infinite(); } }.start(); new Thread() { public void run() { ! B.infinite_emcp(); } }.start(); ! RedefineClassHelper.redefineClass(B.class, newB); System.gc(); ! B.infinite(); // Start a thread with the second version of infinite_emcp running new Thread() { public void run() { ! B.infinite_emcp(); } }.start(); for (int i = 0; i < 20 ; i++) { String s = new String("some garbage"); System.gc(); } ! RedefineClassHelper.redefineClass(B.class, evenNewerB); System.gc(); for (int i = 0; i < 20 ; i++) { ! B.infinite(); String s = new String("some garbage"); System.gc(); } ! B.infinite_emcp(); // purge should clean everything up. ! B.stop = true; for (int i = 0; i < 20 ; i++) { ! B.infinite(); String s = new String("some garbage"); System.gc(); } } } --- 93,151 ---- " public static void infinite_emcp() { " + " System.out.println(\"infinite_emcp now obsolete called\");" + " }" + "}"; public static void main(String[] args) throws Exception { new Thread() { public void run() { ! RedefineRunningMethods_B.infinite(); } }.start(); new Thread() { public void run() { ! RedefineRunningMethods_B.infinite_emcp(); } }.start(); ! RedefineClassHelper.redefineClass(RedefineRunningMethods_B.class, newB); System.gc(); ! RedefineRunningMethods_B.infinite(); // Start a thread with the second version of infinite_emcp running new Thread() { public void run() { ! RedefineRunningMethods_B.infinite_emcp(); } }.start(); for (int i = 0; i < 20 ; i++) { String s = new String("some garbage"); System.gc(); } ! RedefineClassHelper.redefineClass(RedefineRunningMethods_B.class, evenNewerB); System.gc(); for (int i = 0; i < 20 ; i++) { ! RedefineRunningMethods_B.infinite(); String s = new String("some garbage"); System.gc(); } ! RedefineRunningMethods_B.infinite_emcp(); // purge should clean everything up. ! RedefineRunningMethods_B.stop = true; for (int i = 0; i < 20 ; i++) { ! RedefineRunningMethods_B.infinite(); String s = new String("some garbage"); System.gc(); } } }
< prev index next >