diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java index 3ea3111057e..a0ffcdce685 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java @@ -1088,21 +1088,22 @@ public class PDOM extends PlatformObject implements IPDOM { return fLinkageIDCache.get(linkage.getLinkageID()); } - private IBinding inProgress; + private ThreadLocal inProgress = new ThreadLocal(); @Override public IIndexFragmentBinding adaptBinding(IBinding binding) throws CoreException { - if (inProgress == binding) { + if (inProgress.get() == binding) { // Detect if we're recursing during the adapt. That shouldn't happen and // leads to stack overflow when it does. return null; } - inProgress = binding; - IIndexFragmentBinding result = adaptBinding(binding, true); - inProgress = null; - - return result; + inProgress.set(binding); + try { + return adaptBinding(binding, true); + } finally { + inProgress.set(null); + } } private IIndexFragmentBinding adaptBinding(IBinding binding, boolean includeLocal) throws CoreException {