Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
Description
//BufferPool public void releaseBuffer(ByteBuffer byteBuffer) { // always remove from head of the list and append at last ByteBuffer buffer = bufferList.remove(0); // Ensure the buffer to be removed is always at the head of the list. Preconditions.checkArgument(buffer.equals(byteBuffer)); buffer.clear(); bufferList.add(buffer); Preconditions.checkArgument(currentBufferIndex >= 0); currentBufferIndex--; }
In the code above, it expects buffer and byteBuffer are the same object, i.e. buffer == byteBuffer. However the precondition is checking buffer.equals(byteBuffer). Unfortunately, both buffer and byteBuffer have remaining() == 0 so that equals(..) returns true and the precondition does not catch the bug.
Attachments
Attachments
Issue Links
- links to