diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/CModelListener.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/CModelListener.java index f6ef7442884..bfc8231223d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/CModelListener.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/CModelListener.java @@ -39,7 +39,7 @@ public class CModelListener implements IElementChangedListener, IResourceChangeL public static boolean sSuppressUpdateOfLastRecentlyUsed = false; private PDOMManager fManager; - private LinkedHashMap fLRUs= new LinkedHashMap(UPDATE_LR_CHANGED_FILES_COUNT, 0.75f, true) { + private final LinkedHashMap fLRUs= new LinkedHashMap(UPDATE_LR_CHANGED_FILES_COUNT, 0.75f, true) { @Override protected boolean removeEldestEntry(Map.Entry eldest) { return size() > UPDATE_LR_CHANGED_FILES_COUNT; @@ -131,23 +131,25 @@ public class CModelListener implements IElementChangedListener, IResourceChangeL } if (count > 0) { - if (addLRUs) { - for (final ITranslationUnit tu : fLRUs.keySet()) { - if (tu.getResource().exists()) { - final ICProject cproject= tu.getCProject(); - DeltaAnalyzer analyzer= changeMap.get(cproject); - if (analyzer == null) { - analyzer= new DeltaAnalyzer(); - changeMap.put(cproject, analyzer); + synchronized(fLRUs) { + if (addLRUs) { + for (final ITranslationUnit tu : fLRUs.keySet()) { + if (tu.getResource().exists()) { + final ICProject cproject= tu.getCProject(); + DeltaAnalyzer analyzer= changeMap.get(cproject); + if (analyzer == null) { + analyzer= new DeltaAnalyzer(); + changeMap.put(cproject, analyzer); + } + analyzer.getForcedList().add(tu); } - analyzer.getForcedList().add(tu); } } - } - count= Math.min(count, newLRUs.length); - for (int i = 0; i < count; i++) { - final ITranslationUnit tu = newLRUs[i]; - fLRUs.put(tu, tu); + count= Math.min(count, newLRUs.length); + for (int i = 0; i < count; i++) { + final ITranslationUnit tu = newLRUs[i]; + fLRUs.put(tu, tu); + } } } }