diff --git a/launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/docker/launcher/ContainerTargetTypeProvider.java b/launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/docker/launcher/ContainerTargetTypeProvider.java index 73b40a44527..f529d427a35 100644 --- a/launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/docker/launcher/ContainerTargetTypeProvider.java +++ b/launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/docker/launcher/ContainerTargetTypeProvider.java @@ -48,7 +48,7 @@ public class ContainerTargetTypeProvider private ILaunchTargetManager targetManager; @Override - public void init(ILaunchTargetManager targetManager) { + public synchronized void init(ILaunchTargetManager targetManager) { this.targetManager = targetManager; ILaunchBarManager launchbarManager = CDebugCorePlugin .getService(ILaunchBarManager.class); @@ -60,14 +60,17 @@ public class ContainerTargetTypeProvider } IDockerConnection[] connections = DockerConnectionManager.getInstance() .getConnections(); + DockerConnectionManager.getInstance().addConnectionManagerListener(this); Map establishedConnectionMap = new HashMap<>(); Set imageNames = new HashSet<>(); for (IDockerConnection connection : connections) { + // Get Images before checking state as the state may be + // unknown until a request is made + List images = connection.getImages(); if (connection .getState() == EnumDockerConnectionState.ESTABLISHED) { establishedConnectionMap.put(connection.getUri(), connection); } - List images = connection.getImages(); for (IDockerImage image : images) { if (!image.isDangling() && !image.isIntermediateImage()) { String imageName = "[" //$NON-NLS-1$ @@ -112,8 +115,6 @@ public class ContainerTargetTypeProvider DockerLaunchUIPlugin.log(e); } - DockerConnectionManager.getInstance() - .addConnectionManagerListener(this); } @Override @@ -123,7 +124,8 @@ public class ContainerTargetTypeProvider } @Override - public void changeEvent(IDockerConnection connection, int type) { + public synchronized void changeEvent(IDockerConnection connection, + int type) { ICBuildConfigurationManager mgr = CCorePlugin .getService(ICBuildConfigurationManager.class); ICBuildConfigurationManager2 manager = (ICBuildConfigurationManager2) mgr; diff --git a/launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/internal/docker/launcher/ui/launchbar/ContainerGCCToolChainProvider.java b/launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/internal/docker/launcher/ui/launchbar/ContainerGCCToolChainProvider.java index aba09ca8f88..3134e07bacf 100644 --- a/launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/internal/docker/launcher/ui/launchbar/ContainerGCCToolChainProvider.java +++ b/launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/internal/docker/launcher/ui/launchbar/ContainerGCCToolChainProvider.java @@ -53,10 +53,13 @@ public class ContainerGCCToolChainProvider } @Override - public void init(IToolChainManager manager) throws CoreException { + public synchronized void init(IToolChainManager manager) + throws CoreException { this.toolChainManager = manager; IDockerConnection[] connections = DockerConnectionManager.getInstance() .getConnections(); + DockerConnectionManager.getInstance() + .addConnectionManagerListener(this); Map connectionMap = new HashMap<>(); for (IDockerConnection connection : connections) { connectionMap.put(connection.getUri(), connection); @@ -87,12 +90,11 @@ public class ContainerGCCToolChainProvider } } - DockerConnectionManager.getInstance() - .addConnectionManagerListener(this); } @Override - public void changeEvent(IDockerConnection connection, int type) { + public synchronized void changeEvent(IDockerConnection connection, + int type) { ICBuildConfigurationManager mgr = CCorePlugin .getService(ICBuildConfigurationManager.class); ICBuildConfigurationManager2 manager = (ICBuildConfigurationManager2) mgr;