From 670f997eac5bc0727628762f59cd30417e0f6c58 Mon Sep 17 00:00:00 2001 From: CycleMaker <133181918+CycleMaker@users.noreply.github.com> Date: Mon, 8 Jan 2024 20:40:08 +0800 Subject: [PATCH] fix AbortPolicyWithReport Semaphore lock not released (#13609) Co-authored-by: wuzihan --- .../support/AbortPolicyWithReport.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReport.java b/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReport.java index 223a72419de..1f2e82e77ea 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReport.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReport.java @@ -156,13 +156,13 @@ private void dumpJStack() { if (!guard.tryAcquire()) { return; } - // To avoid multiple dump, check again - if (System.currentTimeMillis() - lastPrintTime < TEN_MINUTES_MILLS) { - return; - } - - ExecutorService pool = Executors.newSingleThreadExecutor(); + ExecutorService pool = null; try { + // To avoid multiple dump, check again + if (System.currentTimeMillis() - lastPrintTime < TEN_MINUTES_MILLS) { + return; + } + pool = Executors.newSingleThreadExecutor(); pool.execute(() -> { String dumpPath = getDumpPath(); @@ -186,12 +186,14 @@ private void dumpJStack() { logger.error(COMMON_UNEXPECTED_CREATE_DUMP, "", "", "dump jStack error", t); } finally { lastPrintTime = System.currentTimeMillis(); - guard.release(); } }); } finally { + guard.release(); // must shutdown thread pool ,if not will lead to OOM - pool.shutdown(); + if (pool != null) { + pool.shutdown(); + } } }