From 77a562dfee04cfb4a76a84257cf33fd73ab6b696 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Thu, 12 Aug 2021 19:58:50 +0100 Subject: [PATCH] Add doOnDiscard hook for streaming mode Potential fix for issue reported at https://github.com/reactor/reactor-netty/issues/1746 --- .../http/codec/EncoderHttpMessageWriter.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/codec/EncoderHttpMessageWriter.java b/spring-web/src/main/java/org/springframework/http/codec/EncoderHttpMessageWriter.java index 3fe19207738..cf1d1464467 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/EncoderHttpMessageWriter.java +++ b/spring-web/src/main/java/org/springframework/http/codec/EncoderHttpMessageWriter.java @@ -141,16 +141,18 @@ public class EncoderHttpMessageWriter implements HttpMessageWriter { } if (isStreamingMediaType(contentType)) { - return message.writeAndFlushWith(body.map(buffer -> { - Hints.touchDataBuffer(buffer, hints, logger); - return Mono.just(buffer).doOnDiscard(PooledDataBuffer.class, DataBufferUtils::release); - })); + return message + .writeAndFlushWith(body.map(buffer -> { + Hints.touchDataBuffer(buffer, hints, logger); + return Mono.just(buffer).doOnDiscard(PooledDataBuffer.class, DataBufferUtils::release); + })) + .doOnDiscard(PooledDataBuffer.class, DataBufferUtils::release); } if (logger.isDebugEnabled()) { body = body.doOnNext(buffer -> Hints.touchDataBuffer(buffer, hints, logger)); } - return message.writeWith(body); + return message.writeWith(body).doOnDiscard(PooledDataBuffer.class, DataBufferUtils::release); } @Nullable