SessionCloseOnGCTest#testCloseOneSessionOnGC: enforce that Finalizer will be called after garbage collector
This commit is contained in:
parent
487d976760
commit
7970b6e6f8
|
@ -525,10 +525,12 @@ public abstract class ActiveMQTestBase extends Assert {
|
|||
|
||||
public static void forceGC() {
|
||||
log.info("#test forceGC");
|
||||
WeakReference<Object> dumbReference = new WeakReference<Object>(new Object());
|
||||
AtomicInteger finalized = new AtomicInteger(0);
|
||||
WeakReference<DumbReference> dumbReference = new WeakReference<>(new DumbReference(finalized));
|
||||
// A loop that will wait GC, using the minimal time as possible
|
||||
while (dumbReference.get() != null) {
|
||||
while (!(dumbReference.get() == null && finalized.get() == 1)) {
|
||||
System.gc();
|
||||
System.runFinalization();
|
||||
try {
|
||||
Thread.sleep(100);
|
||||
}
|
||||
|
@ -2535,4 +2537,19 @@ public abstract class ActiveMQTestBase extends Assert {
|
|||
public static void waitForLatch(CountDownLatch latch) throws InterruptedException {
|
||||
assertTrue("Latch has got to return within a minute", latch.await(1, TimeUnit.MINUTES));
|
||||
}
|
||||
}
|
||||
|
||||
protected static class DumbReference {
|
||||
|
||||
private AtomicInteger finalized;
|
||||
|
||||
public DumbReference(AtomicInteger finalized) {
|
||||
this.finalized = finalized;
|
||||
}
|
||||
|
||||
public void finalize() throws Throwable {
|
||||
System.out.println("FINALIZE");
|
||||
finalized.incrementAndGet();
|
||||
super.finalize();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue