Add more logging to finalization test
We now print which elements were not finalized then attempt a
sleep to see if the error is a race condition or a another error.
Bug: 17932313
Change-Id: I4d41abfff0fa6838dd513cf23821bb486305d74f
diff --git a/test/036-finalizer/src/Main.java b/test/036-finalizer/src/Main.java
index 4ebbdc5..e3cf4ee 100644
--- a/test/036-finalizer/src/Main.java
+++ b/test/036-finalizer/src/Main.java
@@ -125,18 +125,28 @@
}
static class FinalizeCounter {
+ public static final int maxCount = 1024;
+ public static boolean finalized[] = new boolean[maxCount];
private static Object finalizeLock = new Object();
private static volatile int finalizeCount = 0;
private int index;
static int getCount() {
return finalizeCount;
}
+ static void printNonFinalized() {
+ for (int i = 0; i < maxCount; ++i) {
+ if (!FinalizeCounter.finalized[i]) {
+ System.err.println("Element " + i + " was not finalized");
+ }
+ }
+ }
FinalizeCounter(int index) {
this.index = index;
}
protected void finalize() {
synchronized(finalizeLock) {
++finalizeCount;
+ finalized[index] = true;
}
}
}
@@ -149,11 +159,21 @@
}
private static void runFinalizationTest() {
- int count = 1024;
- allocFinalizableObjects(count);
+ allocFinalizableObjects(FinalizeCounter.maxCount);
Runtime.getRuntime().gc();
System.runFinalization();
- System.out.println("Finalized " + FinalizeCounter.getCount() + " / " + count);
+ System.out.println("Finalized " + FinalizeCounter.getCount() + " / " + FinalizeCounter.maxCount);
+ if (FinalizeCounter.getCount() != FinalizeCounter.maxCount) {
+ // Print out all the finalized elements.
+ FinalizeCounter.printNonFinalized();
+ // Try to sleep for a couple seconds to see if the objects became finalized after.
+ try {
+ java.lang.Thread.sleep(2000);
+ } catch (InterruptedException e) {
+ }
+ System.out.println("After sleep finalized " + FinalizeCounter.getCount() + " / " + FinalizeCounter.maxCount);
+ FinalizeCounter.printNonFinalized();
+ }
}
public static class FinalizerTest {