Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Schorn2011-10-03 14:41:36 +0000
committerMarkus Schorn2011-10-03 14:41:36 +0000
commit2ac81668e38d623ebe7d5b9439a5dbd20a020790 (patch)
tree6a234abf6ff9fdab4e958fb3d6b207a5ee3d6699
parentc33f596d9c1d95f6fa240ef8ccd85e1cd2632f6c (diff)
downloadorg.eclipse.cdt-2ac81668e38d623ebe7d5b9439a5dbd20a020790.tar.gz
org.eclipse.cdt-2ac81668e38d623ebe7d5b9439a5dbd20a020790.tar.xz
org.eclipse.cdt-2ac81668e38d623ebe7d5b9439a5dbd20a020790.zip
Bug 359485: Workaround deadlock with preferences.
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java13
1 files changed, 10 insertions, 3 deletions
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 496142cc0ae..fcc17191389 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
@@ -85,6 +85,7 @@ import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
@@ -483,6 +484,8 @@ public class PDOMManager implements IWritableIndexManager, IListener {
String newid= IndexerPreferences.get(prj, IndexerPreferences.KEY_INDEXER_ID, IPDOMManager.ID_NO_INDEXER);
Properties props= IndexerPreferences.getProperties(prj);
+ // Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=359485
+ synchronized (new ProjectScope(prj).getNode(CCorePlugin.PLUGIN_ID)) {
synchronized (fUpdatePolicies) {
if (fClosingProjects.contains(prj.getName())) {
return;
@@ -506,7 +509,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
}
enqueue(new PDOMRebuildTask(indexer));
}
- }
+ }}
if (oldIndexer != null) {
stopIndexer(oldIndexer);
@@ -539,6 +542,8 @@ public class PDOMManager implements IWritableIndexManager, IListener {
assert !Thread.holdsLock(fProjectToPDOM);
try {
+ // Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=359485
+ synchronized (new ProjectScope(prj).getNode(CCorePlugin.PLUGIN_ID)) {
synchronized (fUpdatePolicies) {
if (fClosingProjects.contains(name)) {
if (fTraceIndexerSetup)
@@ -588,12 +593,14 @@ public class PDOMManager implements IWritableIndexManager, IListener {
}
return;
}
- }
+ }}
// rebuild is required, try import first.
TeamPDOMImportOperation operation= new TeamPDOMImportOperation(project);
operation.run(pm);
+ // Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=359485
+ synchronized (new ProjectScope(prj).getNode(CCorePlugin.PLUGIN_ID)) {
synchronized (fUpdatePolicies) {
if (fClosingProjects.contains(name)) {
if (fTraceIndexerSetup)
@@ -620,7 +627,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
task= new PDOMRebuildTask(indexer);
}
enqueue(task);
- }
+ }}
} catch (CoreException e) {
// Ignore if project is no longer open
if (prj.isOpen()) {

Back to the top