Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Gvozdev2012-04-14 17:07:36 +0000
committerAndrew Gvozdev2012-04-15 02:11:26 +0000
commit8fbf618249fc2fc72aac2f5b3f65cfcd545b65c9 (patch)
tree808bd24c4fdeafdad490ec8455c8ade05808181f /core/org.eclipse.cdt.core
parentd474c67844732950b7ffae4fbe93075adaa1a3c4 (diff)
downloadorg.eclipse.cdt-8fbf618249fc2fc72aac2f5b3f65cfcd545b65c9.tar.gz
org.eclipse.cdt-8fbf618249fc2fc72aac2f5b3f65cfcd545b65c9.tar.xz
org.eclipse.cdt-8fbf618249fc2fc72aac2f5b3f65cfcd545b65c9.zip
bug 371797: prevent possible deadlock for specs detectors
Diffstat (limited to 'core/org.eclipse.cdt.core')
-rw-r--r--core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java29
1 files changed, 15 insertions, 14 deletions
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java
index 12b282eab0a..38257b493e2 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java
@@ -105,6 +105,7 @@ public class LanguageSettingsProvidersSerializer {
private static ListenerList fLanguageSettingsChangeListeners = new ListenerList(ListenerList.IDENTITY);
private static ILock serializingLock = Job.getJobManager().newLock();
+ private static ILock serializingLockWsp = Job.getJobManager().newLock();
/**
* Dummy class to represent ill-defined provider.
@@ -468,20 +469,20 @@ public class LanguageSettingsProvidersSerializer {
IProject[] projects = root.getProjects();
for (IProject project : projects) {
- if (project.isAccessible()) {
- ICProjectDescription prjDescription = CCorePlugin.getDefault().getProjectDescription(project, false);
- if (prjDescription != null) {
- try {
+ try {
+ if (project.isAccessible()) {
+ ICProjectDescription prjDescription = CCorePlugin.getDefault().getProjectDescription(project, false);
+ if (prjDescription != null) {
LanguageSettingsChangeEvent event = createEvent(prjDescription, providerIds);
if (event != null) {
events.add(event);
}
- } catch (Throwable e) {
- // log and swallow any exception
- CCorePlugin.log("Error creating event about changes in workspace language settings providers, " //$NON-NLS-1$
- + "project=" + project.getName(), e); //$NON-NLS-1$
}
}
+ } catch (Throwable e) {
+ // log and swallow any exception
+ CCorePlugin.log("Error creating event about changes in workspace language settings providers, " //$NON-NLS-1$
+ + "project=" + project.getName(), e); //$NON-NLS-1$
}
}
@@ -508,12 +509,12 @@ public class LanguageSettingsProvidersSerializer {
if (serializableWorkspaceProviders.isEmpty()) {
java.io.File fileStoreWsp = new java.io.File(uriStoreWsp);
try {
- serializingLock.acquire();
+ serializingLockWsp.acquire();
fileStoreWsp.delete();
// manufacture events while inside the lock
events = createLanguageSettingsChangeEvents(serializableWorkspaceProviders);
} finally {
- serializingLock.release();
+ serializingLockWsp.release();
}
} else {
Document doc = XmlUtil.newDocument();
@@ -526,12 +527,12 @@ public class LanguageSettingsProvidersSerializer {
}
try {
- serializingLock.acquire();
+ serializingLockWsp.acquire();
XmlUtil.serializeXml(doc, uriStoreWsp);
// manufacture events while inside the lock
events = createLanguageSettingsChangeEvents(serializableWorkspaceProviders);
} finally {
- serializingLock.release();
+ serializingLockWsp.release();
}
}
// notify the listeners outside the lock
@@ -596,12 +597,12 @@ public class LanguageSettingsProvidersSerializer {
Document doc = null;
try {
- serializingLock.acquire();
+ serializingLockWsp.acquire();
doc = XmlUtil.loadXml(uriStoreWsp);
} catch (Exception e) {
CCorePlugin.log("Can't load preferences from file " + uriStoreWsp, e); //$NON-NLS-1$
} finally {
- serializingLock.release();
+ serializingLockWsp.release();
}
if (doc != null) {

Back to the top