From 9319e3ebd0ad4934da7380d2df91127bdb89e621 Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Fri, 8 Feb 2013 01:50:44 +0900 Subject: [PATCH] Fix SocketShutdownOutputByPeerTest failure - With half-close enabled, the selector loop was spinning due to uncleared OP_READ flag. - Added some delay to the test for more reliable failure --- .../transport/socket/SocketShutdownOutputByPeerTest.java | 2 ++ .../main/java/io/netty/channel/nio/AbstractNioByteChannel.java | 1 + 2 files changed, 3 insertions(+) diff --git a/testsuite/src/test/java/io/netty/testsuite/transport/socket/SocketShutdownOutputByPeerTest.java b/testsuite/src/test/java/io/netty/testsuite/transport/socket/SocketShutdownOutputByPeerTest.java index 1356797077..9e9b301204 100644 --- a/testsuite/src/test/java/io/netty/testsuite/transport/socket/SocketShutdownOutputByPeerTest.java +++ b/testsuite/src/test/java/io/netty/testsuite/transport/socket/SocketShutdownOutputByPeerTest.java @@ -64,6 +64,7 @@ public class SocketShutdownOutputByPeerTest extends AbstractServerSocketTest { assertTrue(h.ch.isInputShutdown()); assertFalse(h.ch.isOutputShutdown()); assertEquals(1, h.closure.getCount()); + Thread.sleep(100); assertEquals(1, h.halfClosureCount.intValue()); } finally { s.close(); @@ -101,6 +102,7 @@ public class SocketShutdownOutputByPeerTest extends AbstractServerSocketTest { assertTrue(h.ch.isOutputShutdown()); assertEquals(1, h.halfClosure.getCount()); + Thread.sleep(100); assertEquals(0, h.halfClosureCount.intValue()); } finally { s.close(); diff --git a/transport/src/main/java/io/netty/channel/nio/AbstractNioByteChannel.java b/transport/src/main/java/io/netty/channel/nio/AbstractNioByteChannel.java index a987f3eb64..a9041d9f00 100755 --- a/transport/src/main/java/io/netty/channel/nio/AbstractNioByteChannel.java +++ b/transport/src/main/java/io/netty/channel/nio/AbstractNioByteChannel.java @@ -119,6 +119,7 @@ public abstract class AbstractNioByteChannel extends AbstractNioChannel { setInputShutdown(); if (isOpen()) { if (Boolean.TRUE.equals(config().getOption(ChannelOption.ALLOW_HALF_CLOSURE))) { + key.interestOps(key.interestOps() & ~readInterestOp); pipeline.fireUserEventTriggered(ChannelInputShutdownEvent.INSTANCE); } else { close(voidFuture());