Merge branch 'master' of ssh://github.com/netty/netty

This commit is contained in:
norman 2012-08-07 14:59:54 +02:00
commit 3ed3827760

View File

@ -54,6 +54,7 @@ public class AioSocketChannel extends AbstractAioChannel implements SocketChanne
private boolean flushing; private boolean flushing;
private final AtomicBoolean readSuspended = new AtomicBoolean(); private final AtomicBoolean readSuspended = new AtomicBoolean();
private final AtomicBoolean readInProgress = new AtomicBoolean();
private final Runnable readTask = new Runnable() { private final Runnable readTask = new Runnable() {
@Override @Override
@ -191,6 +192,11 @@ public class AioSocketChannel extends AbstractAioChannel implements SocketChanne
return; return;
} }
// prevent ReadPendingException
if (!readInProgress.compareAndSet(false, true)) {
return;
}
ByteBuf byteBuf = pipeline().inboundByteBuffer(); ByteBuf byteBuf = pipeline().inboundByteBuffer();
if (!byteBuf.readable()) { if (!byteBuf.readable()) {
byteBuf.discardReadBytes(); byteBuf.discardReadBytes();
@ -297,6 +303,9 @@ public class AioSocketChannel extends AbstractAioChannel implements SocketChanne
} }
} }
} finally { } finally {
// see beginRead
channel.readInProgress.set(false);
if (read) { if (read) {
if (!channel.readSuspended.get()) { if (!channel.readSuspended.get()) {
pipeline.fireInboundBufferUpdated(); pipeline.fireInboundBufferUpdated();