This is an automated email from the ASF dual-hosted git repository.

Aias00 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git


The following commit(s) were added to refs/heads/master by this push:
     new 65b9ef56a6 fix(tcp): dispose upstream connection pool (#7119)
65b9ef56a6 is described below

commit 65b9ef56a6f85f282561293a5d8a86cd230e3260
Author: Liming Deng <[email protected]>
AuthorDate: Mon Sep 21 22:45:42 2026 +0800

    fix(tcp): dispose upstream connection pool (#7119)
    
    Co-authored-by: aias00 <[email protected]>
---
 .../apache/shenyu/protocol/tcp/TcpBootstrapServer.java   | 16 ++++++++++++++++
 .../protocol/tcp/connection/ConnectionContext.java       | 10 ++++++++++
 .../shenyu/protocol/tcp/TcpBootstrapServerTest.java      |  2 ++
 3 files changed, 28 insertions(+)

diff --git 
a/shenyu-protocol/shenyu-protocol-tcp/src/main/java/org/apache/shenyu/protocol/tcp/TcpBootstrapServer.java
 
b/shenyu-protocol/shenyu-protocol-tcp/src/main/java/org/apache/shenyu/protocol/tcp/TcpBootstrapServer.java
index df58619334..843e823c74 100644
--- 
a/shenyu-protocol/shenyu-protocol-tcp/src/main/java/org/apache/shenyu/protocol/tcp/TcpBootstrapServer.java
+++ 
b/shenyu-protocol/shenyu-protocol-tcp/src/main/java/org/apache/shenyu/protocol/tcp/TcpBootstrapServer.java
@@ -84,6 +84,11 @@ public class TcpBootstrapServer implements BootstrapServer {
                     .runOn(loopResources);
             server = tcpServer.bindNow();
         } catch (RuntimeException startFailure) {
+            try {
+                connectionContext.dispose();
+            } catch (RuntimeException cleanupFailure) {
+                startFailure.addSuppressed(cleanupFailure);
+            }
             try {
                 loopResources.dispose();
             } catch (RuntimeException cleanupFailure) {
@@ -148,6 +153,17 @@ public class TcpBootstrapServer implements BootstrapServer 
{
         } catch (RuntimeException ex) {
             failure = ex;
         }
+        try {
+            if (Objects.nonNull(connectionContext)) {
+                connectionContext.dispose();
+            }
+        } catch (RuntimeException ex) {
+            if (Objects.isNull(failure)) {
+                failure = ex;
+            } else {
+                failure.addSuppressed(ex);
+            }
+        }
         try {
             if (Objects.nonNull(loopResources)) {
                 loopResources.dispose();
diff --git 
a/shenyu-protocol/shenyu-protocol-tcp/src/main/java/org/apache/shenyu/protocol/tcp/connection/ConnectionContext.java
 
b/shenyu-protocol/shenyu-protocol-tcp/src/main/java/org/apache/shenyu/protocol/tcp/connection/ConnectionContext.java
index f9cb56c1e7..0c194c128f 100644
--- 
a/shenyu-protocol/shenyu-protocol-tcp/src/main/java/org/apache/shenyu/protocol/tcp/connection/ConnectionContext.java
+++ 
b/shenyu-protocol/shenyu-protocol-tcp/src/main/java/org/apache/shenyu/protocol/tcp/connection/ConnectionContext.java
@@ -23,6 +23,7 @@ import reactor.netty.resources.ConnectionProvider;
 import reactor.netty.tcp.TcpClient;
 
 import java.time.Duration;
+import java.util.Objects;
 import java.util.Properties;
 
 /**
@@ -77,4 +78,13 @@ public class ConnectionContext {
                 );
     }
 
+    /**
+     * Dispose the connection pool.
+     */
+    public void dispose() {
+        if (Objects.nonNull(connectionProvider)) {
+            connectionProvider.dispose();
+        }
+    }
+
 }
diff --git 
a/shenyu-protocol/shenyu-protocol-tcp/src/test/java/org/apache/shenyu/protocol/tcp/TcpBootstrapServerTest.java
 
b/shenyu-protocol/shenyu-protocol-tcp/src/test/java/org/apache/shenyu/protocol/tcp/TcpBootstrapServerTest.java
index 76f393a5d4..3c2dec161e 100644
--- 
a/shenyu-protocol/shenyu-protocol-tcp/src/test/java/org/apache/shenyu/protocol/tcp/TcpBootstrapServerTest.java
+++ 
b/shenyu-protocol/shenyu-protocol-tcp/src/test/java/org/apache/shenyu/protocol/tcp/TcpBootstrapServerTest.java
@@ -229,6 +229,7 @@ public class TcpBootstrapServerTest {
         server.shutdown();
 
         verify(disposableServer).disposeNow();
+        verify(connectionContext).dispose();
         verify(loopResources).dispose();
     }
 
@@ -248,6 +249,7 @@ public class TcpBootstrapServerTest {
         assertSame(serverFailure, actual);
         assertEquals(1, actual.getSuppressed().length);
         assertSame(loopFailure, actual.getSuppressed()[0]);
+        verify(connectionContext).dispose();
         verify(loopResources).dispose();
         assertDoesNotThrow(server::shutdown);
     }

Reply via email to