8029525: java/lang/ProcessBuilder/Basic.java fails intermittently
authorrobm
Thu, 05 Dec 2013 16:19:06 +0000
changeset 21985 5c22272c888a
parent 21984 4dff16390b67
child 21986 c1adfe9e7409
8029525: java/lang/ProcessBuilder/Basic.java fails intermittently Reviewed-by: alanb, chegar Contributed-by: roger.riggs@oracle.com
jdk/test/java/lang/ProcessBuilder/Basic.java
--- a/jdk/test/java/lang/ProcessBuilder/Basic.java	Thu Dec 05 07:45:27 2013 -0800
+++ b/jdk/test/java/lang/ProcessBuilder/Basic.java	Thu Dec 05 16:19:06 2013 +0000
@@ -2239,24 +2239,33 @@
             childArgs.add("sleep");
             final Process p = new ProcessBuilder(childArgs).start();
             final long start = System.nanoTime();
-            final CountDownLatch latch = new CountDownLatch(1);
+            final CountDownLatch ready = new CountDownLatch(1);
+            final CountDownLatch done = new CountDownLatch(1);
 
             final Thread thread = new Thread() {
                 public void run() {
                     try {
+                        final boolean result;
                         try {
-                            latch.countDown();
-                            p.waitFor(30000, TimeUnit.MILLISECONDS);
+                            ready.countDown();
+                            result = p.waitFor(30000, TimeUnit.MILLISECONDS);
                         } catch (InterruptedException e) {
                             return;
                         }
-                        fail("waitFor() wasn't interrupted");
-                    } catch (Throwable t) { unexpected(t); }}};
+                        fail("waitFor() wasn't interrupted, its return value was: " + result);
+                    } catch (Throwable t) {
+                        unexpected(t);
+                    } finally {
+                        done.countDown();
+                    }
+                }
+            };
 
             thread.start();
-            latch.await();
+            ready.await();
             Thread.sleep(1000);
             thread.interrupt();
+            done.await();
             p.destroy();
         } catch (Throwable t) { unexpected(t); }