Make 030-bad-finalizer less flaky by removing timing dependent output
Bug: 13108062
(cherry picked from commit 9d94d5f58bdbdcfa5dab7149f96c0d232fb7e306)
Change-Id: Ie240991c5a97af62ab9f24318d5af94cf402d881
diff --git a/test/030-bad-finalizer/src/Main.java b/test/030-bad-finalizer/src/Main.java
index 330e344..942ee25 100644
--- a/test/030-bad-finalizer/src/Main.java
+++ b/test/030-bad-finalizer/src/Main.java
@@ -21,19 +21,47 @@
public static void main(String[] args) {
BadFinalizer bf = new BadFinalizer();
- System.out.println("Constructed object.");
+ System.out.println("About to null reference and request GC.");
bf = null;
-
- System.out.println("Nulled. Requestion gc.");
Runtime.getRuntime().gc();
for (int i = 0; i < 8; i++) {
- BadFinalizer.snooze(4000);
- System.out.println("Requesting another GC.");
+ snooze(4000);
Runtime.getRuntime().gc();
}
- System.out.println("Done waiting.");
+ System.out.println("UNREACHABLE");
System.exit(0);
}
+
+ public static void snooze(int ms) {
+ try {
+ Thread.sleep(ms);
+ } catch (InterruptedException ie) {
+ }
+ }
+
+ /**
+ * Class with a bad finalizer.
+ */
+ public static class BadFinalizer {
+ protected void finalize() {
+ System.out.println("Finalizer started and spinning...");
+ int j = 0;
+
+ /* spin for a bit */
+ long start, end;
+ start = System.nanoTime();
+ for (int i = 0; i < 1000000; i++) {
+ j++;
+ }
+ end = System.nanoTime();
+ System.out.println("Finalizer done spinning.");
+
+ System.out.println("Finalizer sleeping forever now.");
+ while (true) {
+ snooze(10000);
+ }
+ }
+ }
}