From f63d598fe1095ff8e744695d5f001f0867eb2814 Mon Sep 17 00:00:00 2001 From: James Blackburn Date: Tue, 18 Aug 2009 20:01:22 +0000 Subject: [PATCH] Bug 284485 Fix potential race in getProjectDescriptionStorage(IProject project) --- .../settings/model/CProjectDescriptionStorageManager.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionStorageManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionStorageManager.java index bd7ea1bce96..34897c916cd 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionStorageManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionStorageManager.java @@ -16,11 +16,11 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URI; -import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -87,7 +87,7 @@ public class CProjectDescriptionStorageManager { /** Map of StorageType ID -> List of StorageTypes */ private volatile Map> storageTypeMap; /** Map from IProject -> AbstractCProjectDescriptionStorage which is responsible for (de)serializing the project */ - private Map fDescriptionStorageMap = Collections.synchronizedMap(new HashMap()); + private ConcurrentHashMap fDescriptionStorageMap = new ConcurrentHashMap(); private volatile static CProjectDescriptionStorageManager instance; @@ -115,9 +115,9 @@ public class CProjectDescriptionStorageManager { AbstractCProjectDescriptionStorage projStorage = fDescriptionStorageMap.get(project); if (projStorage == null) { projStorage = loadProjectStorage(project); - fDescriptionStorageMap.put(project, projStorage); + fDescriptionStorageMap.putIfAbsent(project, projStorage); } - return projStorage; + return fDescriptionStorageMap.get(project); } /**