fix issue #1189, clear job reference from timer

This commit is contained in:
gongdewei
2020-05-20 22:17:28 +08:00
parent 03cd548ca4
commit f636e01482
@@ -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();
}
}
}