From 19e4eabff27e9a699e51edddc43b5f2e6d76d26e Mon Sep 17 00:00:00 2001 From: Jeff Johnston Date: Wed, 15 May 2019 15:55:02 -0400 Subject: [PATCH] Bug 547145 - Core build use of ProjectDescription should be synchronized - synchronized core build project description manipulations using CoreModel as synchronization class Change-Id: Ic1312d5819ddc08acb492f57a2d87f1998329805 --- .../cdt/core/build/CBuildConfiguration.java | 9 ++++++--- .../build/CBuildConfigurationManager.java | 19 +++++++++++-------- .../META-INF/MANIFEST.MF | 2 +- .../launch/CoreBuildLaunchConfigDelegate.java | 10 +++++++--- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java index d2582994fa4..723ced6db4e 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java @@ -281,9 +281,12 @@ public abstract class CBuildConfiguration extends PlatformObject implements ICBu return; } - IProjectDescription projectDesc = project.getDescription(); - projectDesc.setActiveBuildConfig(config.getName()); - project.setDescription(projectDesc, monitor); + CoreModel m = CoreModel.getDefault(); + synchronized (m) { + IProjectDescription projectDesc = project.getDescription(); + projectDesc.setActiveBuildConfig(config.getName()); + project.setDescription(projectDesc, monitor); + } } protected Preferences getSettings() { diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/CBuildConfigurationManager.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/CBuildConfigurationManager.java index ccdf7279142..89d2dc6fb9e 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/CBuildConfigurationManager.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/CBuildConfigurationManager.java @@ -160,15 +160,18 @@ public class CBuildConfigurationManager String configName, IProgressMonitor monitor) throws CoreException { String name = provider.getId() + '/' + configName; - Set names = new HashSet<>(); - for (IBuildConfiguration config : project.getBuildConfigs()) { - names.add(config.getName()); - } + CoreModel m = CoreModel.getDefault(); + synchronized (m) { + Set names = new HashSet<>(); + for (IBuildConfiguration config : project.getBuildConfigs()) { + names.add(config.getName()); + } - IProjectDescription desc = project.getDescription(); - names.add(name); - desc.setBuildConfigs(names.toArray(new String[names.size()])); - project.setDescription(desc, monitor); + IProjectDescription desc = project.getDescription(); + names.add(name); + desc.setBuildConfigs(names.toArray(new String[names.size()])); + project.setDescription(desc, monitor); + } return project.getBuildConfig(name); } diff --git a/debug/org.eclipse.cdt.debug.core/META-INF/MANIFEST.MF b/debug/org.eclipse.cdt.debug.core/META-INF/MANIFEST.MF index 0b02a406d15..aecca6c71af 100644 --- a/debug/org.eclipse.cdt.debug.core/META-INF/MANIFEST.MF +++ b/debug/org.eclipse.cdt.debug.core/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.cdt.debug.core; singleton:=true -Bundle-Version: 8.3.100.qualifier +Bundle-Version: 8.3.200.qualifier Bundle-Activator: org.eclipse.cdt.debug.core.CDebugCorePlugin Bundle-Vendor: %providerName Bundle-Localization: plugin diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/launch/CoreBuildLaunchConfigDelegate.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/launch/CoreBuildLaunchConfigDelegate.java index 8c29617c243..200faa6db42 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/launch/CoreBuildLaunchConfigDelegate.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/launch/CoreBuildLaunchConfigDelegate.java @@ -18,6 +18,7 @@ import org.eclipse.cdt.core.build.ICBuildConfiguration; import org.eclipse.cdt.core.build.ICBuildConfigurationManager; import org.eclipse.cdt.core.build.IToolChain; import org.eclipse.cdt.core.build.IToolChainManager; +import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.IBinary; import org.eclipse.cdt.debug.core.CDebugCorePlugin; import org.eclipse.cdt.debug.internal.core.InternalDebugCoreMessages; @@ -139,9 +140,12 @@ public abstract class CoreBuildLaunchConfigDelegate extends LaunchConfigurationT ICBuildConfiguration buildConfig = getBuildConfiguration(configuration, mode, target, monitor); if (buildConfig != null) { IProject project = getProject(configuration); - IProjectDescription desc = project.getDescription(); - desc.setActiveBuildConfig(buildConfig.getBuildConfiguration().getName()); - project.setDescription(desc, monitor); + CoreModel m = CoreModel.getDefault(); + synchronized (m) { + IProjectDescription desc = project.getDescription(); + desc.setActiveBuildConfig(buildConfig.getBuildConfiguration().getName()); + project.setDescription(desc, monitor); + } } // proceed with the build