From 53cc68fbf5a76df0cf524d58792d1ff8e2cfcce6 Mon Sep 17 00:00:00 2001 From: yanwenliang Date: Sat, 29 Oct 2022 03:45:16 +0800 Subject: [PATCH] Fix NettyNettyWriteResponseFilter memory leak --- .../cloud/gateway/filter/NettyWriteResponseFilter.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/NettyWriteResponseFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/NettyWriteResponseFilter.java index 256f3e5d..c06c175b 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/NettyWriteResponseFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/NettyWriteResponseFilter.java @@ -66,7 +66,6 @@ public class NettyWriteResponseFilter implements GlobalFilter, Ordered { // until the NettyRoutingFilter is run // @formatter:off return chain.filter(exchange) - .doOnError(throwable -> cleanup(exchange)) .then(Mono.defer(() -> { Connection connection = exchange.getAttribute(CLIENT_RESPONSE_CONN_ATTR); @@ -99,7 +98,8 @@ public class NettyWriteResponseFilter implements GlobalFilter, Ordered { return (isStreamingMediaType(contentType) ? response.writeAndFlushWith(body.map(Flux::just)) : response.writeWith(body)); - })).doOnCancel(() -> cleanup(exchange)); + })).doOnCancel(() -> cleanup(exchange)) + .doOnError(throwable -> cleanup(exchange)); // @formatter:on } @@ -121,7 +121,7 @@ public class NettyWriteResponseFilter implements GlobalFilter, Ordered { private void cleanup(ServerWebExchange exchange) { Connection connection = exchange.getAttribute(CLIENT_RESPONSE_CONN_ATTR); - if (connection != null && connection.channel().isActive() && !connection.isPersistent()) { + if (connection != null && connection.channel().isActive()) { connection.dispose(); } }