提交 ef15a02e 编写于 作者: K kohsuke

fixed a ConcurrentModificationException

git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@15703 71c3de6d-444a-0410-be80-ed276b4c234a
上级 b70935c1
......@@ -26,6 +26,7 @@ package hudson;
import hudson.model.Hudson;
import hudson.util.DescriptorList;
import hudson.util.Memoizer;
import hudson.util.Iterators;
import hudson.ExtensionPoint.LegacyInstancesAreScopedToHudson;
import java.util.AbstractList;
......@@ -102,7 +103,8 @@ public class ExtensionList<T> extends AbstractList<T> {
}
public Iterator<T> iterator() {
return ensureLoaded().iterator();
// we need to intercept mutation, so for now don't allow Iterator.remove
return Iterators.readOnly(ensureLoaded().iterator());
}
public T get(int index) {
......@@ -114,14 +116,20 @@ public class ExtensionList<T> extends AbstractList<T> {
}
@Override
public synchronized T remove(int index) {
T t = get(index);
legacyInstances.remove(t);
public synchronized boolean remove(Object o) {
legacyInstances.remove(o);
if(extensions!=null) {
List<T> r = new ArrayList<T>(extensions);
r.remove(t);
r.remove(o);
extensions = sort(r);
}
return true;
}
@Override
public synchronized T remove(int index) {
T t = get(index);
remove(t);
return t;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册