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 a9518c85b6..b2918e246d 100755 --- a/transport/src/main/java/io/netty/channel/nio/AbstractNioByteChannel.java +++ b/transport/src/main/java/io/netty/channel/nio/AbstractNioByteChannel.java @@ -93,6 +93,11 @@ public abstract class AbstractNioByteChannel extends AbstractNioChannel { "least one byte."); } } + if (!config().isAutoRead()) { + // stop reading until next Channel.read() call + // See https://github.com/netty/netty/issues/1363 + break loop; + } } } } catch (Throwable t) { diff --git a/transport/src/main/java/io/netty/channel/oio/AbstractOioByteChannel.java b/transport/src/main/java/io/netty/channel/oio/AbstractOioByteChannel.java index d0f855ed43..e1e243a263 100755 --- a/transport/src/main/java/io/netty/channel/oio/AbstractOioByteChannel.java +++ b/transport/src/main/java/io/netty/channel/oio/AbstractOioByteChannel.java @@ -90,29 +90,32 @@ public abstract class AbstractOioByteChannel extends AbstractOioChannel { break; } - if (byteBuf.isWritable()) { - continue; - } - - final int capacity = byteBuf.capacity(); - final int maxCapacity = byteBuf.maxCapacity(); - if (capacity == maxCapacity) { - if (read) { - read = false; - pipeline.fireInboundBufferUpdated(); - if (!byteBuf.isWritable()) { - throw new IllegalStateException( - "an inbound handler whose buffer is full must consume at " + - "least one byte."); + if (!byteBuf.isWritable()) { + final int capacity = byteBuf.capacity(); + final int maxCapacity = byteBuf.maxCapacity(); + if (capacity == maxCapacity) { + if (read) { + read = false; + pipeline.fireInboundBufferUpdated(); + if (!byteBuf.isWritable()) { + throw new IllegalStateException( + "an inbound handler whose buffer is full must consume at " + + "least one byte."); + } + } + } else { + final int writerIndex = byteBuf.writerIndex(); + if (writerIndex + available > maxCapacity) { + byteBuf.capacity(maxCapacity); + } else { + byteBuf.ensureWritable(available); } } - } else { - final int writerIndex = byteBuf.writerIndex(); - if (writerIndex + available > maxCapacity) { - byteBuf.capacity(maxCapacity); - } else { - byteBuf.ensureWritable(available); - } + } + if (!config().isAutoRead()) { + // stop reading until next Channel.read() call + // See https://github.com/netty/netty/issues/1363 + break; } } } catch (Throwable t) {