From cacb730235431f6422dd2bbcff6ae0b39e80bb7b Mon Sep 17 00:00:00 2001 From: Roger Riggs Date: Wed, 17 Jun 2015 16:03:49 -0400 Subject: [PATCH] 8086208: java/lang/ProcessHandle/OnExitTest.java: IllegalThreadStateException: process hasn't exited Reviewed-by: martin, dholmes --- .../unix/classes/java/lang/ProcessImpl.java | 17 ++++++++++++++++- .../java/lang/ProcessHandle/OnExitTest.java | 4 ---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/jdk/src/java.base/unix/classes/java/lang/ProcessImpl.java b/jdk/src/java.base/unix/classes/java/lang/ProcessImpl.java index 625a0bed15a..c2c85a69f04 100644 --- a/jdk/src/java.base/unix/classes/java/lang/ProcessImpl.java +++ b/jdk/src/java.base/unix/classes/java/lang/ProcessImpl.java @@ -542,7 +542,22 @@ final class ProcessImpl extends Process { @Override public CompletableFuture onExit() { return ProcessHandleImpl.completion(pid, false) - .handleAsync((exitStatus, unusedThrowable) -> this); + .handleAsync((exitStatus, unusedThrowable) -> { + boolean interrupted = false; + while (true) { + // Ensure that the concurrent task setting the exit status has completed + try { + waitFor(); + break; + } catch (InterruptedException ie) { + interrupted = true; + } + } + if (interrupted) { + Thread.currentThread().interrupt(); + } + return this; + }); } @Override diff --git a/jdk/test/java/lang/ProcessHandle/OnExitTest.java b/jdk/test/java/lang/ProcessHandle/OnExitTest.java index 98e6b9c3b39..1043c55bba2 100644 --- a/jdk/test/java/lang/ProcessHandle/OnExitTest.java +++ b/jdk/test/java/lang/ProcessHandle/OnExitTest.java @@ -26,21 +26,17 @@ import java.lang.InterruptedException; import java.time.Duration; import java.time.Instant; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutionException; -import java.util.stream.Collectors; -import jdk.testlibrary.Platform; import org.testng.annotations.Test; import org.testng.Assert; import org.testng.TestNG; /* * @test - * @library /lib/testlibrary * @summary Functions of Process.onExit and ProcessHandle.onExit * @author Roger Riggs */