From 9f7af7a4936f73fe00e6bc2bfd22886f38a2a67d Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Thu, 6 Oct 2016 11:09:22 -0700 Subject: [PATCH] Bug 503988 - UI thread got blocked by the reconciler Added protection against infinite loops. Change-Id: I0cc3f34ddb9db9d3a23dfd111836a2a84620e8d9 --- .../org/eclipse/cdt/core/parser/util/HashTable.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/util/HashTable.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/util/HashTable.java index 53916c04bd6..ae6ac076faf 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/util/HashTable.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/util/HashTable.java @@ -184,9 +184,13 @@ public class HashTable implements Cloneable { } else { // Need to link. j--; - int k; - while ((k = nextTable[j]) != 0 && k != j + 1) { - j = k - 1; + int maxIterationsLeft = nextTable.length; + for (int k; (k = nextTable[j]) != 0 && k != j + 1; j = k - 1) { + if (--maxIterationsLeft < 0) { + throw new IllegalStateException("i = " + i + " hash = " + hash + " j = " + j //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + + "\n nextTable = " + Arrays.toString(nextTable) //$NON-NLS-1$ + + "\n hashTable = " + Arrays.toString(hashTable)); //$NON-NLS-1$ + } } nextTable[j] = i + 1; }