From 19e4eabff27e9a699e51edddc43b5f2e6d76d26e Mon Sep 17 00:00:00 2001 From: Jeff Johnston Date: Wed, 15 May 2019 15:55:02 -0400 Subject: Bug 547145 - Core build use of ProjectDescription should be synchronized - synchronized core build project description manipulations using CoreModel as synchronization class Change-Id: Ic1312d5819ddc08acb492f57a2d87f1998329805 --- .../eclipse/cdt/core/build/CBuildConfiguration.java | 9 ++++++--- .../core/build/CBuildConfigurationManager.java | 19 +++++++++++-------- 2 files changed, 17 insertions(+), 11 deletions(-) (limited to 'core') 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); } -- cgit v1.2.3