diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/ByteBufferAccumulator.java b/jetty-io/src/main/java/org/eclipse/jetty/io/ByteBufferAccumulator.java index 071f75b78d3c..569ac9727bff 100644 --- a/jetty-io/src/main/java/org/eclipse/jetty/io/ByteBufferAccumulator.java +++ b/jetty-io/src/main/java/org/eclipse/jetty/io/ByteBufferAccumulator.java @@ -79,23 +79,28 @@ public void copyBuffer(ByteBuffer buffer) public ByteBuffer takeByteBuffer() { + ByteBuffer combinedBuffer; + if (_buffers.size() == 1) + { + combinedBuffer = _buffers.get(0); + _buffers.clear(); + return combinedBuffer; + } + int length = getLength(); - ByteBuffer combinedBuffer = _bufferPool.acquire(length, false); + combinedBuffer = _bufferPool.acquire(length, false); for (ByteBuffer buffer : _buffers) { combinedBuffer.put(buffer); + _bufferPool.release(buffer); } + _buffers.clear(); return combinedBuffer; } public ByteBuffer toByteBuffer() { - if (_buffers.size() == 1) - return _buffers.get(0); - ByteBuffer combinedBuffer = takeByteBuffer(); - _buffers.forEach(_bufferPool::release); - _buffers.clear(); _buffers.add(combinedBuffer); return combinedBuffer; }