diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MultiPart.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MultiPart.java index 77e842ddc95..c7dbb270e96 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MultiPart.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MultiPart.java @@ -624,7 +624,7 @@ public Content.Chunk read() // TODO: use a ByteBuffer pool and direct ByteBuffers? ByteBuffer byteBuffer = UTF_8.encode(builder.toString()); state = State.CONTENT; - yield Content.Chunk.from(byteBuffer, false); + yield Content.Chunk.from(byteBuffer, false, () -> {}); } case CONTENT -> { diff --git a/jetty-core/jetty-io/src/main/java/org/eclipse/jetty/io/content/ByteBufferContentSource.java b/jetty-core/jetty-io/src/main/java/org/eclipse/jetty/io/content/ByteBufferContentSource.java index 4cf897f85fb..473b32c8ace 100644 --- a/jetty-core/jetty-io/src/main/java/org/eclipse/jetty/io/content/ByteBufferContentSource.java +++ b/jetty-core/jetty-io/src/main/java/org/eclipse/jetty/io/content/ByteBufferContentSource.java @@ -78,9 +78,7 @@ public Content.Chunk read() if (last) terminated = Content.Chunk.EOF; } - if (!buffer.hasRemaining()) - return last ? Content.Chunk.EOF : Content.Chunk.EMPTY; - return Content.Chunk.from(buffer, last); + return Content.Chunk.from(buffer, last, () -> {}); } @Override diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/MockHttpStream.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/MockHttpStream.java index 574115be720..4d6a13ce07a 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/MockHttpStream.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/MockHttpStream.java @@ -33,7 +33,31 @@ public class MockHttpStream implements HttpStream { private static final Throwable SUCCEEDED = new Throwable(); - private static final Content.Chunk DEMAND = Content.Chunk.EMPTY; + private static final Content.Chunk DEMAND = new Content.Chunk() { + @Override + public ByteBuffer getByteBuffer() + { + return BufferUtil.EMPTY_BUFFER; + } + + @Override + public boolean isLast() + { + return false; + } + + @Override + public void retain() + { + throw new UnsupportedOperationException(); + } + + @Override + public boolean release() + { + return true; + } + }; private final long _nanoTime = NanoTime.now(); private final AtomicReference _content = new AtomicReference<>(); private final AtomicReference _complete = new AtomicReference<>(); @@ -65,7 +89,7 @@ public boolean isDemanding() public Runnable addContent(ByteBuffer buffer, boolean last) { - return addContent((last && BufferUtil.isEmpty(buffer)) ? Content.Chunk.EOF : Content.Chunk.from(buffer, last)); + return addContent(Content.Chunk.from(buffer, last, () -> {})); } public Runnable addContent(String content, boolean last) diff --git a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletMultiPartFormData.java b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletMultiPartFormData.java index 8a1d1e4cd8b..0eb1d7aae42 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletMultiPartFormData.java +++ b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletMultiPartFormData.java @@ -107,7 +107,7 @@ private Parts parse(ServletContextRequest.ServletApiRequest request) throws IOEx formData.parse(Content.Chunk.EOF); break; } - formData.parse(Content.Chunk.from(ByteBuffer.wrap(buffer, 0, read), false)); + formData.parse(Content.Chunk.from(ByteBuffer.wrap(buffer, 0, read), false, () -> {})); } return new Parts(formData);