提交 295bb0f8 编写于 作者: A Arnaud TAMAILLON 提交者: Oleg Nenashev

[JENKINS-55361] DescriptorExtensionList not locking correctly, leading to deadlocks (#3828)

* Centralize Descriptor extension list retrieval in DescriptorExtensionList

* Switch to protected way of retrieving ExtensionList

* [JENKINS-55361] Correct DescriptorExtensionList lock to match Descriptor ExtensionList

* [JENKINS-55361] - Add comment to explain using the custom lock (and to retrigger CI)
上级 a78a6a80
......@@ -161,13 +161,13 @@ public class DescriptorExtensionList<T extends Describable<T>, D extends Descrip
@Override
public boolean add(D d) {
boolean r = super.add(d);
hudson.getExtensionList(Descriptor.class).add(d);
getDescriptorExtensionList().add(d);
return r;
}
@Override
public boolean remove(Object o) {
hudson.getExtensionList(Descriptor.class).remove(o);
getDescriptorExtensionList().remove(o);
return super.remove(o);
}
......@@ -176,7 +176,8 @@ public class DescriptorExtensionList<T extends Describable<T>, D extends Descrip
*/
@Override
protected Object getLoadLock() {
return this;
// Get a lock for the singleton extension list to prevent deadlocks (JENKINS-55361)
return getDescriptorExtensionList().getLoadLock();
}
/**
......@@ -189,7 +190,7 @@ public class DescriptorExtensionList<T extends Describable<T>, D extends Descrip
LOGGER.log(Level.WARNING, "Cannot load extension components, because Jenkins instance has not been assigned yet");
return Collections.emptyList();
}
return _load(jenkins.getExtensionList(Descriptor.class).getComponents());
return _load(getDescriptorExtensionList().getComponents());
}
@Override
......@@ -211,6 +212,10 @@ public class DescriptorExtensionList<T extends Describable<T>, D extends Descrip
return r;
}
private ExtensionList<Descriptor> getDescriptorExtensionList() {
return ExtensionList.lookup(Descriptor.class);
}
/**
* Stores manually registered Descriptor instances. Keyed by the {@link Describable} type.
*/
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册