diff options
author | Andrew Gvozdev | 2012-04-14 17:07:36 +0000 |
---|---|---|
committer | Andrew Gvozdev | 2012-04-15 02:11:26 +0000 |
commit | 8fbf618249fc2fc72aac2f5b3f65cfcd545b65c9 (patch) | |
tree | 808bd24c4fdeafdad490ec8455c8ade05808181f /core/org.eclipse.cdt.core | |
parent | d474c67844732950b7ffae4fbe93075adaa1a3c4 (diff) | |
download | org.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.java | 29 |
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) { |