diff --git a/platform/lang-impl/src/com/intellij/execution/ExecutorRegistryImpl.java b/platform/lang-impl/src/com/intellij/execution/ExecutorRegistryImpl.java index 2a5c0e4711e2..04471074818d 100644 --- a/platform/lang-impl/src/com/intellij/execution/ExecutorRegistryImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/ExecutorRegistryImpl.java @@ -33,10 +33,7 @@ import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; /** * @author spleaner @@ -55,7 +52,7 @@ public class ExecutorRegistryImpl extends ExecutorRegistry { private final Map myContextActionId2Action = new HashMap(); // [Project, ExecutorId, RunnerId] - private final Set> myInProgress = new java.util.HashSet>(); + private final Set> myInProgress = Collections.synchronizedSet(new java.util.HashSet>()); public ExecutorRegistryImpl(ActionManager actionManager) { myActionManager = actionManager; @@ -144,6 +141,19 @@ public class ExecutorRegistryImpl extends ExecutorRegistry { } }); } + + @Override + public void projectClosed(final Project project) { + // perform cleanup + synchronized (myInProgress) { + for (Iterator> it = myInProgress.iterator(); it.hasNext(); ) { + final Trinity trinity = it.next(); + if (project.equals(trinity.first)) { + it.remove(); + } + } + } + } });