Fix a bug where ChannelOutboundBuffer.removeBytes() throws ClassCastException

When a ChannelOutboundBuffer contains ByteBufs followed by a FileRegion,
removeBytes() will fail with a ClassCastException.  It should break the
loop instead.
This commit is contained in:
Trustin Lee 2014-08-15 09:54:32 -07:00
parent 23d15c71ee
commit 44d9163169

View File

@ -304,11 +304,13 @@ public final class ChannelOutboundBuffer {
*/
public void removeBytes(long writtenBytes) {
for (;;) {
final ByteBuf buf = (ByteBuf) current();
if (buf == null) {
Object msg = current();
if (!(msg instanceof ByteBuf)) {
assert writtenBytes == 0;
break;
}
final ByteBuf buf = (ByteBuf) msg;
final int readerIndex = buf.readerIndex();
final int readableBytes = buf.writerIndex() - readerIndex;