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();