--- old/src/macosx/classes/java/util/prefs/MacOSXPreferencesFile.java 2012-02-14 13:59:06.000000000 -0800 +++ new/src/macosx/classes/java/util/prefs/MacOSXPreferencesFile.java 2012-02-14 13:59:06.000000000 -0800 @@ -192,6 +192,38 @@ } + // Sync only current user preferences + static synchronized boolean syncUser() { + boolean ok = true; + if (cachedFiles != null && !cachedFiles.isEmpty()) { + Iterator iter = cachedFiles.values().iterator(); + while (iter.hasNext()) { + WeakReference ref = iter.next(); + MacOSXPreferencesFile f = (MacOSXPreferencesFile)ref.get(); + if (f != null && f.user == cfCurrentUser) { + if (!f.synchronize()) ok = false; + } else { + iter.remove(); + } + } + } + // Clear changed file list. The changed files were guaranteed to + // have been in the cached file list (because there was a strong + // reference from changedFiles. + if (changedFiles != null) { + Iterator iterChanged = changedFiles.iterator(); + while (iterChanged.hasNext()) { + MacOSXPreferencesFile f = iterChanged.next(); + if (f != null && f.user == cfCurrentUser) + iterChanged.remove(); + } + } + return ok; + } + + + + // Write all prefs changes to disk, but do not clear all cached prefs // values. Also kills any scheduled flush task. // There's no CFPreferencesFlush() (), so lots of cached prefs --- old/src/macosx/classes/java/util/prefs/MacOSXPreferences.java 2012-02-14 13:59:06.000000000 -0800 +++ new/src/macosx/classes/java/util/prefs/MacOSXPreferences.java 2012-02-14 13:59:06.000000000 -0800 @@ -228,8 +228,14 @@ if (isRemoved()) throw new IllegalStateException("Node has been removed"); // fixme! overkill - if (!MacOSXPreferencesFile.syncWorld()) { - throw new BackingStoreException("Synchronization failed for node '" + path + "'"); + if (isUser) { + if (!MacOSXPreferencesFile.syncUser()) { + throw new BackingStoreException("Synchronization failed for node '" + path + "'"); + } + } else { + if (!MacOSXPreferencesFile.syncWorld()) { + throw new BackingStoreException("Synchronization failed for node '" + path + "'"); + } } } }