Skip to content

Commit beaa38b

Browse files
committed
Merge branch '4.3.x'
2 parents 7020613 + ea42aa3 commit beaa38b

3 files changed

Lines changed: 13 additions & 2 deletions

File tree

.github/workflows/ci.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
name: Spring Cloud Gateway CI Job
23

34
on:

spring-cloud-gateway-server-webflux/src/main/java/org/springframework/cloud/gateway/filter/factory/RetryGatewayFilterFactory.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,6 @@ public void reset(ServerWebExchange exchange) {
246246
Connection conn = exchange.getAttribute(ServerWebExchangeUtils.CLIENT_RESPONSE_CONN_ATTR);
247247
if (conn != null) {
248248
trace("disposing response connection before next iteration");
249-
conn.dispose();
250-
exchange.getAttributes().remove(ServerWebExchangeUtils.CLIENT_RESPONSE_CONN_ATTR);
251249
}
252250
ServerWebExchangeUtils.reset(exchange);
253251
}

spring-cloud-gateway-server-webflux/src/main/java/org/springframework/cloud/gateway/support/ServerWebExchangeUtils.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.apache.commons.logging.LogFactory;
3535
import reactor.core.publisher.Flux;
3636
import reactor.core.publisher.Mono;
37+
import reactor.netty.Connection;
3738

3839
import org.springframework.cloud.client.loadbalancer.Response;
3940
import org.springframework.cloud.gateway.filter.factory.GatewayFilterFactory;
@@ -222,6 +223,17 @@ public static boolean setResponseStatus(ServerWebExchange exchange, HttpStatus h
222223

223224
public static void reset(ServerWebExchange exchange) {
224225
// TODO: what else to do to reset exchange?
226+
// Dispose and clean up client connection to prevent connection leaks
227+
Connection conn = exchange.getAttribute(CLIENT_RESPONSE_CONN_ATTR);
228+
if (conn != null) {
229+
conn.dispose();
230+
exchange.getAttributes().remove(CLIENT_RESPONSE_CONN_ATTR);
231+
}
232+
233+
// Clean up client response
234+
exchange.getAttributes().remove(CLIENT_RESPONSE_ATTR);
235+
236+
// Remove added response headers
225237
Set<String> addedHeaders = exchange.getAttributeOrDefault(CLIENT_RESPONSE_HEADER_NAMES, Collections.emptySet());
226238
addedHeaders.forEach(header -> exchange.getResponse().getHeaders().remove(header));
227239
removeAlreadyRouted(exchange);

0 commit comments

Comments
 (0)