From 8c3ba9ec2d651d0f1faa0dfd2266365030e34918 Mon Sep 17 00:00:00 2001 From: Lukas Felber Date: Fri, 28 Mar 2014 17:12:29 +0100 Subject: [PATCH] Bug 431684 - Intermittent test failures in IndexBugsTest Improved reliability of BaseTestCase.waitForIndexer method. Change-Id: Ifcfb4e90a1595e6cc2bc90856daad6cd265b6247 Signed-off-by: Lukas Felber Reviewed-on: https://git.eclipse.org/r/24080 Tested-by: Hudson CI Reviewed-by: Sergey Prigogin IP-Clean: Sergey Prigogin Tested-by: Sergey Prigogin --- .../cdt/core/testplugin/util/BaseTestCase.java | 12 +----------- .../eclipse/cdt/internal/core/pdom/PDOMManager.java | 2 +- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/util/BaseTestCase.java b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/util/BaseTestCase.java index 3ff3846e9e5..ca52e0e744b 100644 --- a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/util/BaseTestCase.java +++ b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/util/BaseTestCase.java @@ -38,7 +38,6 @@ import org.eclipse.cdt.core.testplugin.TestScannerProvider; import org.eclipse.cdt.internal.core.CCoreInternals; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTNameBase; import org.eclipse.cdt.internal.core.pdom.CModelListener; -import org.eclipse.cdt.internal.core.pdom.PDOMManager; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResourceStatus; import org.eclipse.core.resources.ResourcesPlugin; @@ -305,16 +304,7 @@ public class BaseTestCase extends TestCase { public static void waitForIndexer(ICProject project) throws InterruptedException { Job.getJobManager().join(ResourcesPlugin.FAMILY_AUTO_REFRESH, null); - - final PDOMManager indexManager = CCoreInternals.getPDOMManager(); - assertTrue(indexManager.joinIndexer(INDEXER_TIMEOUT_SEC * 1000, npm())); - long waitms= 1; - while (waitms < 2000 && !indexManager.isProjectRegistered(project)) { - Thread.sleep(waitms); - waitms *= 2; - } - assertTrue(indexManager.isProjectRegistered(project)); - assertTrue(indexManager.joinIndexer(INDEXER_TIMEOUT_SEC * 1000, npm())); + assertTrue(CCoreInternals.getPDOMManager().joinIndexer(INDEXER_TIMEOUT_SEC * 1000, npm())); } public static void waitUntilFileIsIndexed(IIndex index, IFile file) throws Exception { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java index ec6bdbefd38..e032f271604 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java @@ -730,7 +730,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { @Override public boolean isIndexerIdle() { synchronized (fTaskQueue) { - return Job.getJobManager().find(this).length == 0; + return Job.getJobManager().find(this).length == 0 && fTaskQueue.isEmpty(); } }