Skip to content

Commit f7ab749

Browse files
SougandhSiloveeclipse
authored andcommitted
fix ConcurrentModificationException in JDIDebugTarget.cleanup
use concurrent datastructure eclipse-jdt#561
1 parent 5a3824b commit f7ab749

File tree

2 files changed

+6
-7
lines changed

2 files changed

+6
-7
lines changed

org.eclipse.jdt.debug/META-INF/MANIFEST.MF

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
22
Bundle-ManifestVersion: 2
33
Bundle-Name: %pluginName
44
Bundle-SymbolicName: org.eclipse.jdt.debug; singleton:=true
5-
Bundle-Version: 3.22.0.qualifier
5+
Bundle-Version: 3.22.100.qualifier
66
Bundle-ClassPath: jdimodel.jar
77
Bundle-Activator: org.eclipse.jdt.internal.debug.core.JDIDebugPlugin
88
Bundle-Vendor: %providerName

org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIDebugTarget.java

+5-6
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.util.Set;
3030
import java.util.concurrent.Callable;
3131
import java.util.concurrent.ConcurrentHashMap;
32+
import java.util.concurrent.ConcurrentMap;
3233
import java.util.concurrent.atomic.AtomicInteger;
3334

3435
import org.eclipse.core.resources.IFile;
@@ -247,7 +248,7 @@ public class JDIDebugTarget extends JDIDebugElement implements
247248
* Evaluation engine cache by Java project. Engines are disposed when this
248249
* target terminates.
249250
*/
250-
private final Map<IJavaProject, IAstEvaluationEngine> fEngines = new HashMap<>(2);
251+
private final ConcurrentMap<IJavaProject, IAstEvaluationEngine> fEngines = new ConcurrentHashMap<>(2);
251252

252253
/**
253254
* List of step filters - each string is a pattern/fully qualified name of a
@@ -1836,12 +1837,10 @@ protected void cleanup() {
18361837
removeAllBreakpoints();
18371838
DebugPlugin.getDefault().getBreakpointManager().enableTriggerPoints(null, true);
18381839
fOutOfSynchTypes.clear();
1839-
Iterator<IAstEvaluationEngine> engines = fEngines.values().iterator();
1840-
while (engines.hasNext()) {
1841-
IAstEvaluationEngine engine = engines.next();
1840+
fEngines.values().removeIf((IAstEvaluationEngine engine) -> {
18421841
engine.dispose();
1843-
}
1844-
fEngines.clear();
1842+
return true;
1843+
});
18451844
fVirtualMachine = null;
18461845
setThreadStartHandler(null);
18471846
setEventDispatcher(null);

0 commit comments

Comments
 (0)