From f636e01482035da67cf89a9993375b2d9cedfde1 Mon Sep 17 00:00:00 2001 From: gongdewei Date: Wed, 20 May 2020 22:17:28 +0800 Subject: [PATCH] fix issue #1189, clear job reference from timer --- .../system/impl/GlobalJobControllerImpl.java | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/com/taobao/arthas/core/shell/system/impl/GlobalJobControllerImpl.java b/core/src/main/java/com/taobao/arthas/core/shell/system/impl/GlobalJobControllerImpl.java index b32f8c879..0f17507ea 100644 --- a/core/src/main/java/com/taobao/arthas/core/shell/system/impl/GlobalJobControllerImpl.java +++ b/core/src/main/java/com/taobao/arthas/core/shell/system/impl/GlobalJobControllerImpl.java @@ -56,12 +56,7 @@ public class GlobalJobControllerImpl extends JobControllerImpl { /* * 达到超时时间将会停止job */ - TimerTask jobTimeoutTask = new TimerTask() { - @Override - public void run() { - job.terminate(); - } - }; + TimerTask jobTimeoutTask = new JobTimeoutTask(job); Date timeoutDate = new Date(System.currentTimeMillis() + (getJobTimeoutInSecond() * 1000)); ArthasBootstrap.getInstance().getTimer().schedule(jobTimeoutTask, timeoutDate); jobTimeoutTaskMap.put(job.id(), jobTimeoutTask); @@ -103,4 +98,27 @@ public class GlobalJobControllerImpl extends JobControllerImpl { } return result; } + + private static class JobTimeoutTask extends TimerTask { + Job job; + + public JobTimeoutTask(Job job) { + this.job = job; + } + + @Override + public void run() { + if (job != null) { + job.terminate(); + } + } + + @Override + public boolean cancel() { + // clear job reference from timer + // fix issue: https://github.com/alibaba/arthas/issues/1189 + job = null; + return super.cancel(); + } + } }