diff --git a/core/src/main/java/hudson/model/Executor.java b/core/src/main/java/hudson/model/Executor.java index f440f8073ba791ffa86ff2e0bf6f64288b12d3b8..d72ba89b17f0c8899a5dd5b84649a6654c55eb1c 100644 --- a/core/src/main/java/hudson/model/Executor.java +++ b/core/src/main/java/hudson/model/Executor.java @@ -122,12 +122,13 @@ public class Executor extends Thread implements ModelObject { */ public void interrupt(Result result) { Authentication a = Jenkins.getAuthentication(); - User u = User.current(); - - if (a!=ACL.SYSTEM && u!=null) - interrupt(result, new UserInterruption(u)); // worth recording who did it - else + if(a instanceof AnonymousAuthenticationToken || a==ACL.SYSTEM) interrupt(result, new CauseOfInterruption[0]); + else { + // worth recording who did it + // avoid using User.get() to avoid deadlock. + interrupt(result, new UserInterruption(a.getName())); + } } /** diff --git a/core/src/main/java/jenkins/model/CauseOfInterruption.java b/core/src/main/java/jenkins/model/CauseOfInterruption.java index 0175508d30121b8f31a2fe4dbb2d3005a3b49bc1..854265e87a1c957c07e1ea9e408beaf2a2701bc0 100644 --- a/core/src/main/java/jenkins/model/CauseOfInterruption.java +++ b/core/src/main/java/jenkins/model/CauseOfInterruption.java @@ -74,6 +74,10 @@ public abstract class CauseOfInterruption { this.user = user.getId(); } + public UserInterruption(String userId) { + this.user = userId; + } + public User getUser() { return User.get(user); }