From 020598a37c4da40eca16fdb4f3c65491d81243d7 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Fri, 7 Dec 2007 13:46:49 +0000 Subject: [PATCH] Indexer can indirectly block jobs with workspace-rule (bug 211603). --- .../pdom/tests/GeneratePDOMApplicationTest.java | 3 ++- .../eclipse/cdt/internal/core/pdom/PDOMManager.java | 10 +++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/GeneratePDOMApplicationTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/GeneratePDOMApplicationTest.java index 248997ec22a..4a6ad1b5722 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/GeneratePDOMApplicationTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/GeneratePDOMApplicationTest.java @@ -213,7 +213,8 @@ public class GeneratePDOMApplicationTest extends PDOMTestBase { } finally { wpdom.releaseReadLock(); } - assertTrue(stateCount[0] == 2); + // depending on the timing the index of the temporary project is changed once or twice. + assertTrue(stateCount[0] == 2 || stateCount[0] == 4); } public void testExternalExportProjectProvider_SysIncludes() 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 73ccbfac686..caf9ddb14fb 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 @@ -139,6 +139,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { private static final ISchedulingRule NOTIFICATION_SCHEDULING_RULE = new PerInstanceSchedulingRule(); private static final ISchedulingRule INDEXER_SCHEDULING_RULE = new PerInstanceSchedulingRule(); + private static final ISchedulingRule INIT_INDEXER_SCHEDULING_RULE = new PerInstanceSchedulingRule(); /** * Protects indexerJob, currentTask and taskQueue. @@ -683,10 +684,13 @@ public class PDOMManager implements IWritableIndexManager, IListener { // have to check for that. ISchedulingRule rule= project.getWorkspace().getRuleFactory().refreshRule(project.getFolder(SETTINGS_FOLDER_NAME)); if (project.contains(rule)) { - rule= new MultiRule(new ISchedulingRule[] {project, INDEXER_SCHEDULING_RULE }); + rule= MultiRule.combine(project, INIT_INDEXER_SCHEDULING_RULE); } - else if (!rule.contains(project)) { - rule= new MultiRule(new ISchedulingRule[] {rule, project, INDEXER_SCHEDULING_RULE }); + else if (rule.contains(project)) { + rule= MultiRule.combine(rule, INIT_INDEXER_SCHEDULING_RULE); + } + else { + rule= MultiRule.combine(new ISchedulingRule[] {rule, project, INIT_INDEXER_SCHEDULING_RULE }); } addProject.setRule(rule); addProject.setSystem(true);