From 78434c8e2043e18040ea8a57868b2cee46fbd8a5 Mon Sep 17 00:00:00 2001 From: Jason Yu Date: Fri, 15 Sep 2017 16:54:46 +0800 Subject: [PATCH] Release DataBuffers in FreeMarkerView When template processing throws an exception, we must ensure that `DataBuffers` are properly released to avoid memory leaks. Issue: SPR-15966 --- .../web/reactive/result/view/freemarker/FreeMarkerView.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/freemarker/FreeMarkerView.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/freemarker/FreeMarkerView.java index d8de8c03f26..ba7f0aab3f6 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/freemarker/FreeMarkerView.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/freemarker/FreeMarkerView.java @@ -41,6 +41,7 @@ import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.context.ApplicationContextException; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.core.io.buffer.DataBuffer; +import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.http.MediaType; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -199,10 +200,12 @@ public class FreeMarkerView extends AbstractUrlBasedView { getTemplate(locale).process(freeMarkerModel, writer); } catch (IOException ex) { + DataBufferUtils.release(dataBuffer); String message = "Could not load FreeMarker template for URL [" + getUrl() + "]"; return Mono.error(new IllegalStateException(message, ex)); } catch (Throwable ex) { + DataBufferUtils.release(dataBuffer); return Mono.error(ex); } return exchange.getResponse().writeWith(Flux.just(dataBuffer));