Bug 351231 - [prefs] EclipsePreferences#flush method should be
synchronized
diff --git a/bundles/org.eclipse.equinox.preferences/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.preferences/META-INF/MANIFEST.MF
index 28881c6..4a168b6 100644
--- a/bundles/org.eclipse.equinox.preferences/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.equinox.preferences/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.equinox.preferences; singleton:=true
-Bundle-Version: 3.4.1.qualifier
+Bundle-Version: 3.4.2.qualifier
Bundle-Activator: org.eclipse.core.internal.preferences.Activator
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/EclipsePreferences.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/EclipsePreferences.java
index 816bd10..10dbe6c 100644
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/EclipsePreferences.java
+++ b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/EclipsePreferences.java
@@ -322,7 +322,15 @@
/*
* @see org.osgi.service.prefs.Preferences#flush()
*/
- public void flush() throws BackingStoreException {
+ synchronized public void flush() throws BackingStoreException {
+ internalFlush();
+ }
+
+ /*
+ * Do the real flushing in a non-synchronized internal method so sub-classes
+ * (mainly ProjectPreferences and ProfilePreferences) don't cause deadlocks.
+ */
+ protected void internalFlush() throws BackingStoreException {
// illegal state if this node has been removed
checkRemoved();