diff options
author | Mathieu Chartier <mathieuc@google.com> | 2014-10-15 09:59:03 -0700 |
---|---|---|
committer | Mathieu Chartier <mathieuc@google.com> | 2014-10-15 10:05:10 -0700 |
commit | bbb547994cafa049cc1c0b70e049e3833256b935 (patch) | |
tree | 14a85bd03e65b3af0bb28c11cceba2c70434c492 /test/036-finalizer | |
parent | 5c5efc253507eb43265997c9afcd778f72b6cef4 (diff) | |
download | art-bbb547994cafa049cc1c0b70e049e3833256b935.zip art-bbb547994cafa049cc1c0b70e049e3833256b935.tar.gz art-bbb547994cafa049cc1c0b70e049e3833256b935.tar.bz2 |
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
Diffstat (limited to 'test/036-finalizer')
-rw-r--r-- | test/036-finalizer/src/Main.java | 26 |
1 files changed, 23 insertions, 3 deletions
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 @@ public class Main { } 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 @@ public class Main { } 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 { |