8207833: java/nio/channels/Selector/SelectWithConsumer.java testCancel() fails intermittently

Reviewed-by: alanb
This commit is contained in:
Hamlin Li 2018-07-20 15:24:42 +08:00
parent 4823354a6a
commit 17f7056d82

View file

@ -548,12 +548,18 @@ public class SelectWithConsumer {
// write to sink to ensure that the source is readable // write to sink to ensure that the source is readable
sink.write(messageBuffer()); sink.write(messageBuffer());
sink.configureBlocking(false);
source.configureBlocking(false); source.configureBlocking(false);
SelectionKey key1 = sink.register(sel, SelectionKey.OP_WRITE); SelectionKey key1 = source.register(sel, SelectionKey.OP_READ);
SelectionKey key2 = 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(); sel.selectNow();
assertTrue(sel.keys().contains(key1)); assertTrue(sel.keys().contains(key1));
assertTrue(sel.keys().contains(key2)); assertTrue(sel.keys().contains(key2));
assertTrue(sel.selectedKeys().contains(key1)); assertTrue(sel.selectedKeys().contains(key1));