From 17f7056d82c4ad0d9fac05fb9a6de0903c761d7c Mon Sep 17 00:00:00 2001 From: Hamlin Li Date: Fri, 20 Jul 2018 15:24:42 +0800 Subject: [PATCH] 8207833: java/nio/channels/Selector/SelectWithConsumer.java testCancel() fails intermittently Reviewed-by: alanb --- .../nio/channels/Selector/SelectWithConsumer.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/test/jdk/java/nio/channels/Selector/SelectWithConsumer.java b/test/jdk/java/nio/channels/Selector/SelectWithConsumer.java index 0c2ac8581df..67cdc2dce35 100644 --- a/test/jdk/java/nio/channels/Selector/SelectWithConsumer.java +++ b/test/jdk/java/nio/channels/Selector/SelectWithConsumer.java @@ -548,12 +548,18 @@ public class SelectWithConsumer { // write to sink to ensure that the source is readable sink.write(messageBuffer()); - sink.configureBlocking(false); source.configureBlocking(false); - SelectionKey key1 = sink.register(sel, SelectionKey.OP_WRITE); - SelectionKey key2 = source.register(sel, SelectionKey.OP_READ); + SelectionKey key1 = source.register(sel, SelectionKey.OP_READ); + // make sure pipe source is readable before we do following checks. + // this is sometime necessary on windows where pipe is implemented + // as a pair of connected socket, so there is no guarantee that written + // bytes on sink side is immediately available on source side. + sel.select(); + sink.configureBlocking(false); + SelectionKey key2 = sink.register(sel, SelectionKey.OP_WRITE); sel.selectNow(); + assertTrue(sel.keys().contains(key1)); assertTrue(sel.keys().contains(key2)); assertTrue(sel.selectedKeys().contains(key1));