8172246: [TESTBUG] runtime/RedefineTests/RedefinePreviousVersions.java 'Class unloading: has_previous_versions = true' missing from stdout/stderr
Summary: add boolean to gate redefinition start
Reviewed-by: sspitsyn, dholmes
--- a/hotspot/test/runtime/RedefineTests/RedefinePreviousVersions.java Wed Jan 04 11:44:26 2017 -0800
+++ b/hotspot/test/runtime/RedefineTests/RedefinePreviousVersions.java Wed Jan 04 21:13:04 2017 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, 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
@@ -48,20 +48,23 @@
public static String newRunning =
"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.currentThread().sleep(10);//sleep for 10 ms
+ Thread.sleep(10); // sleep for 10 ms
} catch(InterruptedException ie) {
}
}
public static void infinite() {
+ running = true;
while (!stop) { localSleep(); }
}
}
@@ -70,8 +73,6 @@
if (args.length > 0) {
- String jarFile = System.getProperty("test.src") + "/testcase.jar";
-
// java -javaagent:redefineagent.jar -Xlog:stuff RedefinePreviousVersions
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( "-javaagent:redefineagent.jar",
"-Xlog:redefine+class+iklass+add=trace,redefine+class+iklass+purge=trace",
@@ -100,6 +101,10 @@
}
}.start();
+ while (!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);