@Test(timeout = 60_000L) public void testResourceHandlerWithReleaserClearedByJVM() throws InterruptedException { long initialLeakedResources = ReferenceCountingResourceHolder.leakedResources(); final AtomicBoolean released = new AtomicBoolean(false); // createDanglingReleaser() need to be a separate method because otherwise JVM preserves a ref to Holder on stack // and Cleaner is not called createDanglingReleaser(released); verifyCleanerRun(released, initialLeakedResources); }
@Test(timeout = 60_000L) public void testResourceHandlerClearedByJVM() throws InterruptedException { long initialLeakedResources = ReferenceCountingResourceHolder.leakedResources(); final AtomicBoolean released = new AtomicBoolean(false); makeReleasingHandler(released); // Don't store the handler in a variable and don't close it, the object leaked verifyCleanerRun(released, initialLeakedResources); }