From 8a6defe9630c31be176126069b1d46f00a770db7 Mon Sep 17 00:00:00 2001 From: Olivier Lamy Date: Mon, 8 Mar 2021 17:58:04 +1000 Subject: [PATCH] [JENKINS-64931] no need to synchronize on Queue as queue is using a Lock and this under certain conditions can generate a deadlock. look at the dump attached to the issue JENKINS-64931 (#5305) Signed-off-by: olivier lamy --- .../main/java/hudson/model/queue/FutureImpl.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/hudson/model/queue/FutureImpl.java b/core/src/main/java/hudson/model/queue/FutureImpl.java index b0e56a2199..d72a337f03 100644 --- a/core/src/main/java/hudson/model/queue/FutureImpl.java +++ b/core/src/main/java/hudson/model/queue/FutureImpl.java @@ -71,16 +71,14 @@ public final class FutureImpl extends AsyncFutureImpl implements Que @Override public boolean cancel(boolean mayInterruptIfRunning) { Queue q = Jenkins.get().getQueue(); - synchronized (q) { - synchronized (this) { - if(!executors.isEmpty()) { - if(mayInterruptIfRunning) - for (Executor e : executors) - e.interrupt(); - return mayInterruptIfRunning; - } - return q.cancel(task); + synchronized (this) { + if(!executors.isEmpty()) { + if(mayInterruptIfRunning) + for (Executor e : executors) + e.interrupt(); + return mayInterruptIfRunning; } + return q.cancel(task); } }