8003253: TEST_BUG: java/nio/channels/AsynchronousChannelGroup/Unbounded.java hang intermittently [win]
authoralanb
Sun, 11 Nov 2012 10:05:37 +0000
changeset 14501 10121b56420c
parent 14422 ecbc54a46e8b
child 14502 d63fed06fed4
8003253: TEST_BUG: java/nio/channels/AsynchronousChannelGroup/Unbounded.java hang intermittently [win] Reviewed-by: chegar
jdk/test/java/nio/channels/AsynchronousChannelGroup/Unbounded.java
--- a/jdk/test/java/nio/channels/AsynchronousChannelGroup/Unbounded.java	Fri Nov 09 01:15:04 2012 -0800
+++ b/jdk/test/java/nio/channels/AsynchronousChannelGroup/Unbounded.java	Sun Nov 11 10:05:37 2012 +0000
@@ -36,6 +36,9 @@
     // number of concurrent completion handlers
     static final int CONCURRENCY_COUNT = 256;
 
+    // set to true if an I/O operation fails
+    static volatile boolean failed;
+
     public static void main(String[] args) throws Exception {
         // all accepted connections are added to a queue
         final ArrayBlockingQueue<AsynchronousSocketChannel> queue =
@@ -51,6 +54,8 @@
                 listener.accept((Void)null, this);
             }
             public void failed(Throwable exc, Void att) {
+                failed = true;
+                System.err.println("accept failed: " + exc);
             }
         });
         System.out.println("Listener created.");
@@ -94,6 +99,9 @@
                         }
                     }
                     public void failed(Throwable exc, AsynchronousSocketChannel ch) {
+                        failed = true;
+                        System.err.println("read failed: " + exc);
+                        completed(0, ch);
                     }
                 });
         }
@@ -104,6 +112,7 @@
         while (remaining > 0) {
             AsynchronousSocketChannel ch = queue.take();
             ch.write(ByteBuffer.wrap("welcome".getBytes())).get();
+            ch.shutdownOutput();
             ch.close();
             remaining--;
         }
@@ -112,5 +121,7 @@
         System.out.println("Waiting for all threads to reach barrier");
         barrier.await();
         listener.close();
+        if (failed)
+            throw new RuntimeException("I/O failed failed, see log for details");
     }
 }