diff options
author | Jonah Graham | 2016-08-10 11:37:03 +0000 |
---|---|---|
committer | Jonah Graham | 2016-08-12 09:13:35 +0000 |
commit | b34d04c0d587d829f4df413de94017739ad582b1 (patch) | |
tree | 16ddec3847de56aa41d325beb9f04403f22682f7 | |
parent | 9982b67c7619ba47599fcb664c4a6d89792463f1 (diff) | |
download | org.eclipse.cdt-b34d04c0d587d829f4df413de94017739ad582b1.tar.gz org.eclipse.cdt-b34d04c0d587d829f4df413de94017739ad582b1.tar.xz org.eclipse.cdt-b34d04c0d587d829f4df413de94017739ad582b1.zip |
Bug 499471: Workaround indexer deadlock when tests running
See the bug for lots more details. Short summary is to prevent project
from being deleted when indexer is still running to prevent the
deadlock.
Change-Id: Ie2523fcbacb3f8a15b43f107bd264069270c4028
Signed-off-by: Jonah Graham <jonah@kichwacoders.com>
10 files changed, 37 insertions, 10 deletions
diff --git a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/envvar/IEnvironmentVariableManagerTests.java b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/envvar/IEnvironmentVariableManagerTests.java index de9e26f3fcf..46d0e8d715d 100644 --- a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/envvar/IEnvironmentVariableManagerTests.java +++ b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/envvar/IEnvironmentVariableManagerTests.java @@ -66,7 +66,7 @@ public class IEnvironmentVariableManagerTests extends TestCase { @Override protected void tearDown() throws Exception { - ResourceHelper.cleanUp(); + ResourceHelper.cleanUp(getName()); } public static Test suite() { @@ -508,7 +508,7 @@ public class IEnvironmentVariableManagerTests extends TestCase { // Save the project description CoreModel.getDefault().setProjectDescription(project, prjDesc); - ResourceHelper.cleanUp(); + ResourceHelper.cleanUp(getName()); assertFalse(project.exists()); ResourceHelper.createCDTProjectWithConfig("envProject"); assertTrue(project.exists()); diff --git a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/ErrorParserEfsFileMatchingTest.java b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/ErrorParserEfsFileMatchingTest.java index 866a2c5bb89..12ab5063698 100644 --- a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/ErrorParserEfsFileMatchingTest.java +++ b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/ErrorParserEfsFileMatchingTest.java @@ -98,7 +98,7 @@ public class ErrorParserEfsFileMatchingTest extends TestCase { @Override protected void tearDown() throws Exception { - ResourceHelper.cleanUp(); + ResourceHelper.cleanUp(getName()); fProject = null; } diff --git a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/ErrorParserFileMatchingTest.java b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/ErrorParserFileMatchingTest.java index a7a148e4b11..5caaa6ca472 100644 --- a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/ErrorParserFileMatchingTest.java +++ b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/ErrorParserFileMatchingTest.java @@ -102,7 +102,7 @@ public class ErrorParserFileMatchingTest extends TestCase { @Override protected void tearDown() throws Exception { - ResourceHelper.cleanUp(); + ResourceHelper.cleanUp(getName()); fProject = null; } diff --git a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/RegexErrorParserTests.java b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/RegexErrorParserTests.java index 1d0cc28d5e8..e3f05a8f71a 100644 --- a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/RegexErrorParserTests.java +++ b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/RegexErrorParserTests.java @@ -92,7 +92,7 @@ public class RegexErrorParserTests extends TestCase { @Override protected void tearDown() throws Exception { - ResourceHelper.cleanUp(); + ResourceHelper.cleanUp(getName()); fProject = null; ErrorParserManager.setUserDefinedErrorParsers(null); diff --git a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/utils/FindProgramLocationTest.java b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/utils/FindProgramLocationTest.java index 646a12292a4..84ba3a441f4 100644 --- a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/utils/FindProgramLocationTest.java +++ b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/utils/FindProgramLocationTest.java @@ -33,7 +33,7 @@ public class FindProgramLocationTest extends TestCase { @Override protected void tearDown() throws Exception { - ResourceHelper.cleanUp(); + ResourceHelper.cleanUp(getName()); } public void testCornerCases() throws CoreException, IOException { diff --git a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/utils/StorableCdtVariablesTest.java b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/utils/StorableCdtVariablesTest.java index 24e4dd2d99b..13254740850 100644 --- a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/utils/StorableCdtVariablesTest.java +++ b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/utils/StorableCdtVariablesTest.java @@ -37,7 +37,7 @@ public class StorableCdtVariablesTest extends TestCase { @Override protected void tearDown() throws Exception { - ResourceHelper.cleanUp(); + ResourceHelper.cleanUp(getName()); } /** diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/CProjectDescriptionDeltaTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/CProjectDescriptionDeltaTests.java index 3412d3743d2..b245251b6b1 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/CProjectDescriptionDeltaTests.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/CProjectDescriptionDeltaTests.java @@ -76,7 +76,7 @@ public class CProjectDescriptionDeltaTests extends BaseTestCase{ @Override protected void tearDown() throws Exception { - ResourceHelper.cleanUp(); + ResourceHelper.cleanUp(getName()); } diff --git a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/ResourceHelper.java b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/ResourceHelper.java index e3d39ef2ce0..b9f48fc511d 100644 --- a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/ResourceHelper.java +++ b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/ResourceHelper.java @@ -683,11 +683,38 @@ public class ResourceHelper { * This method removes *all* Workspace IResources and any external * files / folders created with the #createWorkspaceFile #createWorkspaceFolder * methods in this class + * + * @deprecated Use {@link #cleanUp(String)} instead so test name can be printed in diagnostics */ public static void cleanUp() throws CoreException, IOException { + cleanUp("<unknown>"); + } + + /** + * Clean-up any files created as part of a unit test. + * This method removes *all* Workspace IResources and any external + * files / folders created with the #createWorkspaceFile #createWorkspaceFolder + * methods in this class + */ + public static void cleanUp(String testName) throws CoreException, IOException { IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); root.refreshLocal(IResource.DEPTH_INFINITE, NULL_MONITOR); + // Bug 499471: there is a race condition in the indexer when projects + // are created and deleted quickly. Therefore, wait for the indexer + // to be idle before deleting projects. + if (!CCorePlugin.getIndexManager().isIndexerIdle()) { + // the 2 second wait is very long in practice, when the race condition is + // happening the total join time is just a few ms for most tests, and + // up to 75 ms for a couple of tests on the HIPP + boolean joinSuccess = CCorePlugin.getIndexManager().joinIndexer(2000, new NullProgressMonitor()); + if (!joinSuccess) { + System.err.println( + "Indexer did not stop runing, possible deadlock about to happen. Running test " + testName); + } + } + + // Delete all external files & folders created using ResourceHelper for (String loc : externalFilesCreated) { File f = new File(loc); 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 5d8c32c89b1..e5071f2b9a0 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 @@ -101,7 +101,7 @@ public class BaseTestCase extends TestCase { for (File file; (file = filesToDeleteOnTearDown.pollLast()) != null;) { file.delete(); } - ResourceHelper.cleanUp(); + ResourceHelper.cleanUp(getName()); TestScannerProvider.clear(); super.tearDown(); } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/buildconsole/BuildConsoleTests.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/buildconsole/BuildConsoleTests.java index 52f2dd25df2..7165c617c27 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/buildconsole/BuildConsoleTests.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/buildconsole/BuildConsoleTests.java @@ -54,7 +54,7 @@ public class BuildConsoleTests extends BaseUITestCase { @Override protected void tearDown() throws Exception { - ResourceHelper.cleanUp(); + ResourceHelper.cleanUp(getName()); super.tearDown(); } |