Browse Source

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<XMLEvent>` stream.

Issue: SPR-15707
pull/1442/merge
Arjen Poutsma 8 years ago
parent
commit
9d7b8503d0
  1. 8
      spring-web/src/main/java/org/springframework/http/codec/xml/XmlEventDecoder.java

8
spring-web/src/main/java/org/springframework/http/codec/xml/XmlEventDecoder.java

@ -106,14 +106,14 @@ public class XmlEventDecoder extends AbstractDecoder<XMLEvent> { @@ -106,14 +106,14 @@ public class XmlEventDecoder extends AbstractDecoder<XMLEvent> {
try {
InputStream is = dataBuffer.asInputStream();
Iterator eventReader = inputFactory.createXMLEventReader(is);
return Flux.fromIterable((Iterable<XMLEvent>) () -> eventReader);
return Flux.fromIterable((Iterable<XMLEvent>) () -> eventReader)
.doFinally(t -> {
DataBufferUtils.release(dataBuffer);
});
}
catch (XMLStreamException ex) {
return Mono.error(ex);
}
finally {
DataBufferUtils.release(dataBuffer);
}
});
}
}

Loading…
Cancel
Save