Correct usages of internalNioBuffer
Motivation: There are numerous usages of internalNioBuffer which hard code 0 for the index when the intention was to use the readerIndex(). Modifications: - Remove hard coded 0 for the index and use readerIndex() Result: We are less susceptible to using the wrong index, and don't make assumptions about the ByteBufAllocator.
This commit is contained in:
parent
675980c7ff
commit
2cff918044
@ -588,7 +588,7 @@ public final class ByteBufUtil {
|
|||||||
dst = alloc.buffer(length);
|
dst = alloc.buffer(length);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
final ByteBuffer dstBuf = dst.internalNioBuffer(0, length);
|
final ByteBuffer dstBuf = dst.internalNioBuffer(dst.readerIndex(), length);
|
||||||
final int pos = dstBuf.position();
|
final int pos = dstBuf.position();
|
||||||
CoderResult cr = encoder.encode(src, dstBuf, true);
|
CoderResult cr = encoder.encode(src, dstBuf, true);
|
||||||
if (!cr.isUnderflow()) {
|
if (!cr.isUnderflow()) {
|
||||||
@ -635,7 +635,7 @@ public final class ByteBufUtil {
|
|||||||
try {
|
try {
|
||||||
buffer.writeBytes(src, readerIndex, len);
|
buffer.writeBytes(src, readerIndex, len);
|
||||||
// Use internalNioBuffer(...) to reduce object creation.
|
// Use internalNioBuffer(...) to reduce object creation.
|
||||||
decodeString(decoder, buffer.internalNioBuffer(0, len), dst);
|
decodeString(decoder, buffer.internalNioBuffer(buffer.readerIndex(), len), dst);
|
||||||
} finally {
|
} finally {
|
||||||
// Release the temporary buffer again.
|
// Release the temporary buffer again.
|
||||||
buffer.release();
|
buffer.release();
|
||||||
@ -1087,7 +1087,7 @@ public final class ByteBufUtil {
|
|||||||
ByteBuf heapBuffer = buf.alloc().heapBuffer(length);
|
ByteBuf heapBuffer = buf.alloc().heapBuffer(length);
|
||||||
try {
|
try {
|
||||||
heapBuffer.writeBytes(buf, index, length);
|
heapBuffer.writeBytes(buf, index, length);
|
||||||
decoder.decode(heapBuffer.internalNioBuffer(0, length));
|
decoder.decode(heapBuffer.internalNioBuffer(heapBuffer.readerIndex(), length));
|
||||||
} finally {
|
} finally {
|
||||||
heapBuffer.release();
|
heapBuffer.release();
|
||||||
}
|
}
|
||||||
|
@ -2120,14 +2120,14 @@ public abstract class AbstractByteBufTest {
|
|||||||
|
|
||||||
private void testInternalNioBuffer(int a) {
|
private void testInternalNioBuffer(int a) {
|
||||||
ByteBuf buffer = newBuffer(2);
|
ByteBuf buffer = newBuffer(2);
|
||||||
ByteBuffer buf = buffer.internalNioBuffer(0, 1);
|
ByteBuffer buf = buffer.internalNioBuffer(buffer.readerIndex(), 1);
|
||||||
assertEquals(1, buf.remaining());
|
assertEquals(1, buf.remaining());
|
||||||
|
|
||||||
byte[] data = new byte[a];
|
byte[] data = new byte[a];
|
||||||
PlatformDependent.threadLocalRandom().nextBytes(data);
|
PlatformDependent.threadLocalRandom().nextBytes(data);
|
||||||
buffer.writeBytes(data);
|
buffer.writeBytes(data);
|
||||||
|
|
||||||
buf = buffer.internalNioBuffer(0, a);
|
buf = buffer.internalNioBuffer(buffer.readerIndex(), a);
|
||||||
assertEquals(a, buf.remaining());
|
assertEquals(a, buf.remaining());
|
||||||
|
|
||||||
for (int i = 0; i < a; i++) {
|
for (int i = 0; i < a; i++) {
|
||||||
@ -2972,7 +2972,8 @@ public abstract class AbstractByteBufTest {
|
|||||||
|
|
||||||
@Test(expected = IllegalReferenceCountException.class)
|
@Test(expected = IllegalReferenceCountException.class)
|
||||||
public void testInternalNioBufferAfterRelease() {
|
public void testInternalNioBufferAfterRelease() {
|
||||||
releasedBuffer().internalNioBuffer(0, 1);
|
ByteBuf releasedBuffer = releasedBuffer();
|
||||||
|
releasedBuffer.internalNioBuffer(releasedBuffer.readerIndex(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = IllegalReferenceCountException.class)
|
@Test(expected = IllegalReferenceCountException.class)
|
||||||
|
@ -50,7 +50,7 @@ public class EmptyByteBufTest {
|
|||||||
assertThat(empty.nioBuffer().position(), is(0));
|
assertThat(empty.nioBuffer().position(), is(0));
|
||||||
assertThat(empty.nioBuffer().limit(), is(0));
|
assertThat(empty.nioBuffer().limit(), is(0));
|
||||||
assertThat(empty.nioBuffer(), is(sameInstance(empty.nioBuffer())));
|
assertThat(empty.nioBuffer(), is(sameInstance(empty.nioBuffer())));
|
||||||
assertThat(empty.nioBuffer(), is(sameInstance(empty.internalNioBuffer(0, 0))));
|
assertThat(empty.nioBuffer(), is(sameInstance(empty.internalNioBuffer(empty.readerIndex(), 0))));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -198,7 +198,6 @@ public class SslHandler extends ByteToMessageDecoder implements ChannelOutboundH
|
|||||||
handler.singleBuffer[0] = toByteBuffer(out, writerIndex,
|
handler.singleBuffer[0] = toByteBuffer(out, writerIndex,
|
||||||
out.writableBytes());
|
out.writableBytes());
|
||||||
result = opensslEngine.unwrap(in.nioBuffers(readerIndex, len), handler.singleBuffer);
|
result = opensslEngine.unwrap(in.nioBuffers(readerIndex, len), handler.singleBuffer);
|
||||||
out.writerIndex(writerIndex + result.bytesProduced());
|
|
||||||
} finally {
|
} finally {
|
||||||
handler.singleBuffer[0] = null;
|
handler.singleBuffer[0] = null;
|
||||||
}
|
}
|
||||||
@ -828,7 +827,7 @@ public class SslHandler extends ByteToMessageDecoder implements ChannelOutboundH
|
|||||||
newDirectIn = alloc.directBuffer(readableBytes);
|
newDirectIn = alloc.directBuffer(readableBytes);
|
||||||
newDirectIn.writeBytes(in, readerIndex, readableBytes);
|
newDirectIn.writeBytes(in, readerIndex, readableBytes);
|
||||||
in0 = singleBuffer;
|
in0 = singleBuffer;
|
||||||
in0[0] = newDirectIn.internalNioBuffer(0, readableBytes);
|
in0[0] = newDirectIn.internalNioBuffer(newDirectIn.readerIndex(), readableBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
@ -52,7 +52,7 @@ public class ChannelOutboundBufferTest {
|
|||||||
assertEquals(0, buffer.nioBufferCount());
|
assertEquals(0, buffer.nioBufferCount());
|
||||||
|
|
||||||
ByteBuf buf = copiedBuffer("buf1", CharsetUtil.US_ASCII);
|
ByteBuf buf = copiedBuffer("buf1", CharsetUtil.US_ASCII);
|
||||||
ByteBuffer nioBuf = buf.internalNioBuffer(0, buf.readableBytes());
|
ByteBuffer nioBuf = buf.internalNioBuffer(buf.readerIndex(), buf.readableBytes());
|
||||||
buffer.addMessage(buf, buf.readableBytes(), channel.voidPromise());
|
buffer.addMessage(buf, buf.readableBytes(), channel.voidPromise());
|
||||||
assertEquals("Should still be 0 as not flushed yet", 0, buffer.nioBufferCount());
|
assertEquals("Should still be 0 as not flushed yet", 0, buffer.nioBufferCount());
|
||||||
buffer.addFlush();
|
buffer.addFlush();
|
||||||
@ -84,7 +84,7 @@ public class ChannelOutboundBufferTest {
|
|||||||
ByteBuffer[] buffers = buffer.nioBuffers();
|
ByteBuffer[] buffers = buffer.nioBuffers();
|
||||||
assertEquals(64, buffer.nioBufferCount());
|
assertEquals(64, buffer.nioBufferCount());
|
||||||
for (int i = 0; i < buffer.nioBufferCount(); i++) {
|
for (int i = 0; i < buffer.nioBufferCount(); i++) {
|
||||||
assertEquals(buffers[i], buf.internalNioBuffer(0, buf.readableBytes()));
|
assertEquals(buffers[i], buf.internalNioBuffer(buf.readerIndex(), buf.readableBytes()));
|
||||||
}
|
}
|
||||||
release(buffer);
|
release(buffer);
|
||||||
buf.release();
|
buf.release();
|
||||||
@ -109,7 +109,7 @@ public class ChannelOutboundBufferTest {
|
|||||||
assertEquals(65, buffer.nioBufferCount());
|
assertEquals(65, buffer.nioBufferCount());
|
||||||
for (int i = 0; i < buffer.nioBufferCount(); i++) {
|
for (int i = 0; i < buffer.nioBufferCount(); i++) {
|
||||||
if (i < 65) {
|
if (i < 65) {
|
||||||
assertEquals(buffers[i], buf.internalNioBuffer(0, buf.readableBytes()));
|
assertEquals(buffers[i], buf.internalNioBuffer(buf.readerIndex(), buf.readableBytes()));
|
||||||
} else {
|
} else {
|
||||||
assertNull(buffers[i]);
|
assertNull(buffers[i]);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user