From f3675ff54e9d0097ac4e3680ea7bae25ccc5294e Mon Sep 17 00:00:00 2001 From: Stephen Connolly Date: Tue, 8 Mar 2016 10:55:01 +0000 Subject: [PATCH] Noting that there is a >99% certainty that these can use getInstance() - Plugins using these methods will be safe - The code path I need to analyse is the `Jenkins.super()` constructor code path. As Jenkins extends AbstractCIBase if there is a call there that requires the queue lock during construction it may require these methods to be safe against being called before the singleton has been put in place --- core/src/main/java/hudson/model/Queue.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/core/src/main/java/hudson/model/Queue.java b/core/src/main/java/hudson/model/Queue.java index ff8ddf7e36..b79b664ff9 100644 --- a/core/src/main/java/hudson/model/Queue.java +++ b/core/src/main/java/hudson/model/Queue.java @@ -1182,6 +1182,7 @@ public class Queue extends ResourceController implements Saveable { */ public static void withLock(Runnable runnable) { final Jenkins jenkins = Jenkins.getInstanceOrNull(); + // TODO confirm safe to assume non-null and use getInstance() final Queue queue = jenkins == null ? null : jenkins.getQueue(); if (queue == null) { runnable.run(); @@ -1203,6 +1204,7 @@ public class Queue extends ResourceController implements Saveable { */ public static V withLock(hudson.remoting.Callable callable) throws T { final Jenkins jenkins = Jenkins.getInstanceOrNull(); + // TODO confirm safe to assume non-null and use getInstance() final Queue queue = jenkins == null ? null : jenkins.getQueue(); if (queue == null) { return callable.call(); @@ -1223,6 +1225,7 @@ public class Queue extends ResourceController implements Saveable { */ public static V withLock(java.util.concurrent.Callable callable) throws Exception { final Jenkins jenkins = Jenkins.getInstanceOrNull(); + // TODO confirm safe to assume non-null and use getInstance() final Queue queue = jenkins == null ? null : jenkins.getQueue(); if (queue == null) { return callable.call(); @@ -1240,6 +1243,7 @@ public class Queue extends ResourceController implements Saveable { */ public static boolean tryWithLock(Runnable runnable) { final Jenkins jenkins = Jenkins.getInstanceOrNull(); + // TODO confirm safe to assume non-null and use getInstance() final Queue queue = jenkins == null ? null : jenkins.getQueue(); if (queue == null) { runnable.run(); @@ -1256,6 +1260,7 @@ public class Queue extends ResourceController implements Saveable { */ public static Runnable wrapWithLock(Runnable runnable) { final Jenkins jenkins = Jenkins.getInstanceOrNull(); + // TODO confirm safe to assume non-null and use getInstance() final Queue queue = jenkins == null ? null : jenkins.getQueue(); return queue == null ? runnable : new LockedRunnable(runnable); } @@ -1268,6 +1273,7 @@ public class Queue extends ResourceController implements Saveable { */ public static hudson.remoting.Callable wrapWithLock(hudson.remoting.Callable callable) { final Jenkins jenkins = Jenkins.getInstanceOrNull(); + // TODO confirm safe to assume non-null and use getInstance() final Queue queue = jenkins == null ? null : jenkins.getQueue(); return queue == null ? callable : new LockedHRCallable<>(callable); } @@ -1280,6 +1286,7 @@ public class Queue extends ResourceController implements Saveable { */ public static java.util.concurrent.Callable wrapWithLock(java.util.concurrent.Callable callable) { final Jenkins jenkins = Jenkins.getInstanceOrNull(); + // TODO confirm safe to assume non-null and use getInstance() final Queue queue = jenkins == null ? null : jenkins.getQueue(); return queue == null ? callable : new LockedJUCCallable(callable); } -- GitLab