From 8e1059c5b8e580808bdf335271f7466a08d4e414 Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Wed, 15 May 2019 01:37:34 -0400 Subject: [PATCH] Bug 547224 - Avoid concurrent access to AST type string caches The caches used to be thread-local, but that did not survive the refactoring in bug 512297. This patch makes them thread-local again. Change-Id: Iffe37aef292e4efb05e30af2a251a71fb57b343d --- .../core/dom/parser/ASTTranslationUnit.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTTranslationUnit.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTTranslationUnit.java index 80a20e97e75..1e7b1d279b9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTTranslationUnit.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTTranslationUnit.java @@ -95,8 +95,18 @@ public abstract class ASTTranslationUnit extends ASTNode implements IASTTranslat private IBuiltinBindingsProvider fBuiltinBindingsProvider; // Caches - private final WeakHashMap fUnnormalizedTypeStringCache = new WeakHashMap<>(); - private final WeakHashMap fNormalizedTypeStringCache = new WeakHashMap<>(); + private final ThreadLocal> fUnnormalizedTypeStringCache = new ThreadLocal>() { + @Override + protected WeakHashMap initialValue() { + return new WeakHashMap<>(); + } + }; + private final ThreadLocal> fNormalizedTypeStringCache = new ThreadLocal>() { + @Override + protected WeakHashMap initialValue() { + return new WeakHashMap<>(); + } + }; @Override public final IASTTranslationUnit getTranslationUnit() { @@ -585,6 +595,6 @@ public abstract class ASTTranslationUnit extends ASTNode implements IASTTranslat } public Map getTypeStringCache(boolean normalized) { - return normalized ? fNormalizedTypeStringCache : fUnnormalizedTypeStringCache; + return normalized ? fNormalizedTypeStringCache.get() : fUnnormalizedTypeStringCache.get(); } }