From ac59ecec49d93e04fe2fa191bb71102df0c638ed Mon Sep 17 00:00:00 2001 From: YuQing <384681@qq.com> Date: Fri, 19 Dec 2025 11:15:07 +0800 Subject: [PATCH] prevent re-entrancy for closeConnection --- HISTORY | 3 ++- src/main/java/org/csource/fastdfs/pool/Connection.java | 4 ++++ .../java/org/csource/fastdfs/pool/ConnectionManager.java | 7 ++++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/HISTORY b/HISTORY index 0a3a017..e9b7279 100644 --- a/HISTORY +++ b/HISTORY @@ -1,7 +1,8 @@ -Version 1.39 2025-12-18 +Version 1.39 2025-12-19 * ConnectionPool.getKey() use '-' instead of ':' * ConnectionManager.java: remove private AtomicInteger freeCount + * ConnectionManager.java: prevent re-entrancy for closeConnection Version 1.38 2025-11-28 * bugfixed: loadStorageServersFromTracker correctly with rw option diff --git a/src/main/java/org/csource/fastdfs/pool/Connection.java b/src/main/java/org/csource/fastdfs/pool/Connection.java index d12cc03..e5f3c07 100644 --- a/src/main/java/org/csource/fastdfs/pool/Connection.java +++ b/src/main/java/org/csource/fastdfs/pool/Connection.java @@ -120,6 +120,10 @@ public class Connection { return false; } + public boolean isClosed() { + return this.sock == null; + } + public boolean isNeedActiveTest() { return needActiveTest; } diff --git a/src/main/java/org/csource/fastdfs/pool/ConnectionManager.java b/src/main/java/org/csource/fastdfs/pool/ConnectionManager.java index 44f7614..2dc0a30 100644 --- a/src/main/java/org/csource/fastdfs/pool/ConnectionManager.java +++ b/src/main/java/org/csource/fastdfs/pool/ConnectionManager.java @@ -104,6 +104,7 @@ public class ConnectionManager { if (connection == null) { return; } + lock.lock(); try { connection.setLastAccessTime(System.currentTimeMillis()); @@ -115,8 +116,12 @@ public class ConnectionManager { } public void closeConnection(Connection connection) { + if (connection == null) { + return; + } + try { - if (connection != null) { + if (!connection.isClosed()) { totalCount.decrementAndGet(); connection.closeDirectly(); }