diff options
| author | Markus Schorn | 2011-10-03 14:41:36 +0000 |
|---|---|---|
| committer | Markus Schorn | 2011-10-03 14:53:55 +0000 |
| commit | 242b783c8c4d32d13409ce099c72126ec7d24648 (patch) | |
| tree | 4c2c456a05292617eb34f98ba779e40e32c3b38d | |
| parent | 419eca0c3fb8f14fc0976f479db971e66fcf0b22 (diff) | |
| download | org.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.java | 13 |
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()) { |
