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(); }