diff --git a/src/main/java/com/actiontech/dble/net/handler/BackEndRecycleRunnable.java b/src/main/java/com/actiontech/dble/net/handler/BackEndRecycleRunnable.java index 682162106..bd986e65d 100644 --- a/src/main/java/com/actiontech/dble/net/handler/BackEndRecycleRunnable.java +++ b/src/main/java/com/actiontech/dble/net/handler/BackEndRecycleRunnable.java @@ -29,11 +29,15 @@ public class BackEndRecycleRunnable implements Runnable, BackEndCleaner { @Override public void run() { + BackendConnection conn = service.getConnection(); + if (conn.isClosed()) { + return; + } + try { lock.lock(); try { if (service.isRowDataFlowing()) { - BackendConnection conn = service.getConnection(); if (!condRelease.await(10, TimeUnit.MILLISECONDS)) { if (!conn.isClosed()) { conn.businessClose("recycle time out"); @@ -56,11 +60,12 @@ public class BackEndRecycleRunnable implements Runnable, BackEndCleaner { public void signal() { - lock.lock(); - try { - condRelease.signal(); - } finally { - lock.unlock(); + if (lock.tryLock()) { + try { + condRelease.signal(); + } finally { + lock.unlock(); + } } } diff --git a/src/main/java/com/actiontech/dble/services/mysqlsharding/MySQLResponseService.java b/src/main/java/com/actiontech/dble/services/mysqlsharding/MySQLResponseService.java index 4047da13e..3ae6c2720 100644 --- a/src/main/java/com/actiontech/dble/services/mysqlsharding/MySQLResponseService.java +++ b/src/main/java/com/actiontech/dble/services/mysqlsharding/MySQLResponseService.java @@ -699,6 +699,10 @@ public class MySQLResponseService extends VariablesService { } public void signal() { + if (connection.isClosed()) { + return; + } + if (recycler != null) { recycler.signal(); }