From 9d7b8503d0ee420cfa1ba1a2ffda0500b61042bb Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Thu, 29 Jun 2017 16:19:03 +0200 Subject: [PATCH] Delay DataBuffer release until stream is closed This commit changes the release of data buffers from a finally block into a `doFinally()` lambda on the returned `Flux` stream. Issue: SPR-15707 --- .../springframework/http/codec/xml/XmlEventDecoder.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/codec/xml/XmlEventDecoder.java b/spring-web/src/main/java/org/springframework/http/codec/xml/XmlEventDecoder.java index 1493c894b1..e40314e387 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/xml/XmlEventDecoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/xml/XmlEventDecoder.java @@ -106,14 +106,14 @@ public class XmlEventDecoder extends AbstractDecoder { try { InputStream is = dataBuffer.asInputStream(); Iterator eventReader = inputFactory.createXMLEventReader(is); - return Flux.fromIterable((Iterable) () -> eventReader); + return Flux.fromIterable((Iterable) () -> eventReader) + .doFinally(t -> { + DataBufferUtils.release(dataBuffer); + }); } catch (XMLStreamException ex) { return Mono.error(ex); } - finally { - DataBufferUtils.release(dataBuffer); - } }); } }