Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Schorn2011-10-03 14:41:36 +0000
committerMarkus Schorn2011-10-03 14:53:55 +0000
commit242b783c8c4d32d13409ce099c72126ec7d24648 (patch)
tree4c2c456a05292617eb34f98ba779e40e32c3b38d
parent419eca0c3fb8f14fc0976f479db971e66fcf0b22 (diff)
downloadorg.eclipse.cdt-242b783c8c4d32d13409ce099c72126ec7d24648.tar.gz
org.eclipse.cdt-242b783c8c4d32d13409ce099c72126ec7d24648.tar.xz
org.eclipse.cdt-242b783c8c4d32d13409ce099c72126ec7d24648.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 53bbedadd8e..e9d85a73bd2 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;
@@ -481,6 +482,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;
@@ -504,7 +507,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
}
enqueue(new PDOMRebuildTask(indexer));
}
- }
+ }}
if (oldIndexer != null) {
stopIndexer(oldIndexer);
@@ -537,6 +540,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)
@@ -586,12 +591,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)
@@ -618,7 +625,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