From c007f0f7d405393800a5ff0b09e334ba8c66d695 Mon Sep 17 00:00:00 2001 From: Paul Sandoz Date: Mon, 2 Feb 2015 14:21:32 +0100 Subject: [PATCH] 8072030: Race condition in ThenComposeExceptionTest.java Reviewed-by: chegar --- .../ThenComposeExceptionTest.java | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/jdk/test/java/util/concurrent/CompletableFuture/ThenComposeExceptionTest.java b/jdk/test/java/util/concurrent/CompletableFuture/ThenComposeExceptionTest.java index ad77c863d9f..877bbb9fd4d 100644 --- a/jdk/test/java/util/concurrent/CompletableFuture/ThenComposeExceptionTest.java +++ b/jdk/test/java/util/concurrent/CompletableFuture/ThenComposeExceptionTest.java @@ -36,7 +36,7 @@ import java.util.function.Consumer; /** * @test - * @bug 8068432 + * @bug 8068432 8072030 * @run testng ThenComposeExceptionTest * @summary Test that CompletableFuture.thenCompose works correctly if the * composing future completes exceptionally @@ -92,7 +92,8 @@ public class ThenComposeExceptionTest { Assert.assertNotSame(f_thenCompose, fe, "Composed CompletableFuture returned directly"); AtomicReference eOnWhenComplete = new AtomicReference<>(); - f_thenCompose.whenComplete((r, e) -> eOnWhenComplete.set(e)); + CompletableFuture f_whenComplete = f_thenCompose. + whenComplete((r, e) -> eOnWhenComplete.set(e)); afterAction.accept(fe); @@ -103,10 +104,20 @@ public class ThenComposeExceptionTest { catch (Throwable t) { eOnJoined = t; } - - Assert.assertTrue(eOnWhenComplete.get() instanceof CompletionException, - "Incorrect exception reported on whenComplete"); Assert.assertTrue(eOnJoined instanceof CompletionException, - "Incorrect exception reported when joined"); + "Incorrect exception reported when joined on thenCompose: " + eOnJoined); + + // Need to wait for f_whenComplete to complete to avoid + // race condition when updating eOnWhenComplete + eOnJoined = null; + try { + f_whenComplete.join(); + } catch (Throwable t) { + eOnJoined = t; + } + Assert.assertTrue(eOnJoined instanceof CompletionException, + "Incorrect exception reported when joined on whenComplete: " + eOnJoined); + Assert.assertTrue(eOnWhenComplete.get() instanceof CompletionException, + "Incorrect exception passed to whenComplete: " + eOnWhenComplete.get()); } -} +} \ No newline at end of file