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

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


The following commit(s) were added to refs/heads/master by this push:
     new 7a677647690 Resolve statement manager leaks when creating multiple 
statements. (#35665)
7a677647690 is described below

commit 7a6776476902a00584cb23b7203b9fe3a97d549b
Author: Cong Hu <[email protected]>
AuthorDate: Wed Jun 11 10:25:15 2025 +0800

    Resolve statement manager leaks when creating multiple statements. (#35665)
    
    * Refactor statement manager
    
    * Add release note.
---
 RELEASE-NOTES.md                                                     | 1 +
 .../shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java | 5 +++++
 .../driver/jdbc/core/connection/ShardingSphereConnection.java        | 4 ++--
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index fdcf93262ee..7371dc54191 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -63,6 +63,7 @@
 1. Proxy: Fix `show processlist` not wait for all nodes - 
[#35348](https://github.com/apache/shardingsphere/pull/35348)
 1. Proxy: Fix NoSuchElementException exception when execute MySQL SHOW 
VARIABLES without current database - 
[#35550](https://github.com/apache/shardingsphere/pull/35550)
 1. Parser: Refactor pivot and unpivot clause handling to support multiple 
column names - [35586](https://github.com/apache/shardingsphere/pull/35586)
+1. JDBC: Resolve statement manager leaks when creating multiple statements - 
[#35665](https://github.com/apache/shardingsphere/pull/35665)
 
 ### Change Logs
 
diff --git 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java
 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java
index 59c0af0cc00..6ac1b14a4ea 100644
--- 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java
+++ 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java
@@ -28,6 +28,7 @@ import 
org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 
+import java.sql.Connection;
 import java.sql.SQLException;
 import java.sql.SQLFeatureNotSupportedException;
 import java.sql.SQLWarning;
@@ -219,6 +220,10 @@ public abstract class AbstractStatementAdapter extends 
WrapperAdapter implements
             closeExecutor();
             if (null != getStatementManager()) {
                 getStatementManager().close();
+                Connection connection = getConnection();
+                if (connection instanceof ShardingSphereConnection) {
+                    ((ShardingSphereConnection) 
connection).getStatementManagers().remove(getStatementManager());
+                }
             }
         } finally {
             getRoutedStatements().clear();
diff --git 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
index 7d8431a6b8c..eab60292512 100644
--- 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
+++ 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
@@ -43,7 +43,7 @@ import java.sql.Savepoint;
 import java.sql.Statement;
 import java.util.Collection;
 import java.util.Optional;
-import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.Executor;
 
 /**
@@ -66,7 +66,7 @@ public final class ShardingSphereConnection extends 
AbstractConnectionAdapter {
     private final DriverDatabaseConnectionManager databaseConnectionManager;
     
     @Getter
-    private final Collection<StatementManager> statementManagers = new 
CopyOnWriteArrayList<>();
+    private final Collection<StatementManager> statementManagers = new 
ConcurrentLinkedQueue<>();
     
     @Getter
     private final String processId;

Reply via email to