Skip to content

Commit 2439f87

Browse files
committed
Add onDiscard hook to Jetty client request
The flatMap operation in writeAndFlushWith could buffer internally. Issue: SPR-17424
1 parent 2ba5ded commit 2439f87

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpRequest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.springframework.core.io.buffer.DataBuffer;
3434
import org.springframework.core.io.buffer.DataBufferFactory;
3535
import org.springframework.core.io.buffer.DataBufferUtils;
36+
import org.springframework.core.io.buffer.PooledDataBuffer;
3637
import org.springframework.http.HttpHeaders;
3738
import org.springframework.http.HttpMethod;
3839
import org.springframework.http.MediaType;
@@ -94,7 +95,10 @@ public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
9495

9596
@Override
9697
public Mono<Void> writeAndFlushWith(Publisher<? extends Publisher<? extends DataBuffer>> body) {
97-
Flux<ContentChunk> chunks = Flux.from(body).flatMap(Function.identity()).map(this::toContentChunk);
98+
Flux<ContentChunk> chunks = Flux.from(body)
99+
.flatMap(Function.identity())
100+
.doOnDiscard(PooledDataBuffer.class, DataBufferUtils::release)
101+
.map(this::toContentChunk);
98102
ReactiveRequest.Content content = ReactiveRequest.Content.fromPublisher(chunks, getContentType());
99103
this.reactiveRequest = ReactiveRequest.newBuilder(this.jettyRequest).content(content).build();
100104
return doCommit(this::completes);

0 commit comments

Comments
 (0)