src/macosx/classes/java/util/prefs/MacOSXPreferencesFile.java

Print this page

        

*** 99,111 **** MacOSXPreferencesFile.syncWorld(); } } // Maps string -> weak reference to MacOSXPreferencesFile ! private static HashMap cachedFiles = null; // Files that may have unflushed changes ! private static HashSet changedFiles = null; // Timer and pending sync and flush tasks (which are both scheduled // on the same timer) private static Timer timer = null; --- 99,112 ---- MacOSXPreferencesFile.syncWorld(); } } // Maps string -> weak reference to MacOSXPreferencesFile ! private static HashMap<String, WeakReference<MacOSXPreferencesFile>> ! cachedFiles = null; // Files that may have unflushed changes ! private static HashSet<MacOSXPreferencesFile> changedFiles = null; // Timer and pending sync and flush tasks (which are both scheduled // on the same timer) private static Timer timer = null;
*** 134,158 **** static synchronized MacOSXPreferencesFile getFile(String newName, boolean isUser) { MacOSXPreferencesFile result = null; ! if (cachedFiles == null) cachedFiles = new HashMap(); String hashkey = newName + String.valueOf(isUser); ! WeakReference hashvalue = (WeakReference)cachedFiles.get(hashkey); if (hashvalue != null) { ! result = (MacOSXPreferencesFile)hashvalue.get(); } if (result == null) { // Java user node == CF current user, any host // Java system node == CF any user, current host result = new MacOSXPreferencesFile(newName, isUser ? cfCurrentUser : cfAnyUser, isUser ? cfAnyHost : cfCurrentHost); ! cachedFiles.put(hashkey, new WeakReference(result)); } // Don't schedule this file for flushing until some nodes or // keys are added to it. --- 135,160 ---- static synchronized MacOSXPreferencesFile getFile(String newName, boolean isUser) { MacOSXPreferencesFile result = null; ! if (cachedFiles == null) ! cachedFiles = new HashMap<>(); String hashkey = newName + String.valueOf(isUser); ! WeakReference<MacOSXPreferencesFile> hashvalue = cachedFiles.get(hashkey); if (hashvalue != null) { ! result = hashvalue.get(); } if (result == null) { // Java user node == CF current user, any host // Java system node == CF any user, current host result = new MacOSXPreferencesFile(newName, isUser ? cfCurrentUser : cfAnyUser, isUser ? cfAnyHost : cfCurrentHost); ! cachedFiles.put(hashkey, new WeakReference<MacOSXPreferencesFile>(result)); } // Don't schedule this file for flushing until some nodes or // keys are added to it.
*** 169,182 **** static synchronized boolean syncWorld() { boolean ok = true; if (cachedFiles != null && !cachedFiles.isEmpty()) { ! Iterator iter = cachedFiles.values().iterator(); while (iter.hasNext()) { ! WeakReference ref = (WeakReference)iter.next(); ! MacOSXPreferencesFile f = (MacOSXPreferencesFile)ref.get(); if (f != null) { if (!f.synchronize()) ok = false; } else { iter.remove(); } --- 171,185 ---- static synchronized boolean syncWorld() { boolean ok = true; if (cachedFiles != null && !cachedFiles.isEmpty()) { ! Iterator<WeakReference<MacOSXPreferencesFile>> iter = ! cachedFiles.values().iterator(); while (iter.hasNext()) { ! WeakReference<MacOSXPreferencesFile> ref = iter.next(); ! MacOSXPreferencesFile f = ref.get(); if (f != null) { if (!f.synchronize()) ok = false; } else { iter.remove(); }
*** 200,213 **** // Sync only current user preferences static synchronized boolean syncUser() { boolean ok = true; if (cachedFiles != null && !cachedFiles.isEmpty()) { ! Iterator<WeakReference> 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 { --- 203,217 ---- // Sync only current user preferences static synchronized boolean syncUser() { boolean ok = true; if (cachedFiles != null && !cachedFiles.isEmpty()) { ! Iterator<WeakReference<MacOSXPreferencesFile>> iter = ! cachedFiles.values().iterator(); while (iter.hasNext()) { ! WeakReference<MacOSXPreferencesFile> ref = iter.next(); ! MacOSXPreferencesFile f = ref.get(); if (f != null && f.user == cfCurrentUser) { if (!f.synchronize()) { ok = false; } } else {
*** 238,253 **** static synchronized boolean flushWorld() { boolean ok = true; if (changedFiles != null && !changedFiles.isEmpty()) { ! Iterator iter = changedFiles.iterator(); ! while (iter.hasNext()) { ! MacOSXPreferencesFile f = (MacOSXPreferencesFile)iter.next(); ! if (!f.synchronize()) ok = false; } - changedFiles.clear(); } if (flushTimerTask != null) { flushTimerTask.cancel(); --- 242,255 ---- static synchronized boolean flushWorld() { boolean ok = true; if (changedFiles != null && !changedFiles.isEmpty()) { ! for (MacOSXPreferencesFile f : changedFiles) { ! if (!f.synchronize()) ! ok = false; } changedFiles.clear(); } if (flushTimerTask != null) { flushTimerTask.cancel();
*** 261,271 **** // at most flushDelay() seconds. // Must be called when synchronized on MacOSXPreferencesFile.class private void markChanged() { // Add this file to the changed file list ! if (changedFiles == null) changedFiles = new HashSet(); changedFiles.add(this); // Schedule a new flush and a shutdown hook, if necessary if (flushTimerTask == null) { flushTimerTask = new FlushTask(); --- 263,274 ---- // at most flushDelay() seconds. // Must be called when synchronized on MacOSXPreferencesFile.class private void markChanged() { // Add this file to the changed file list ! if (changedFiles == null) ! changedFiles = new HashSet<>(); changedFiles.add(this); // Schedule a new flush and a shutdown hook, if necessary if (flushTimerTask == null) { flushTimerTask = new FlushTask();
*** 307,317 **** syncInterval = -2; // bad property value - default off } if (syncInterval > 0) { timer().schedule(new TimerTask() { ! public void run() { MacOSXPreferencesFile.syncWorld();} }, syncInterval * 1000, syncInterval * 1000); } else { // syncInterval property not set. No sync timer ever. } } --- 310,322 ---- syncInterval = -2; // bad property value - default off } if (syncInterval > 0) { timer().schedule(new TimerTask() { ! @Override ! public void run() { ! MacOSXPreferencesFile.syncWorld();} }, syncInterval * 1000, syncInterval * 1000); } else { // syncInterval property not set. No sync timer ever. } }
*** 321,330 **** --- 326,336 ---- private static synchronized Timer timer() { if (timer == null) { timer = new Timer(true); // daemon Thread flushThread = new Thread() { + @Override public void run() { flushWorld(); } }; /* Set context class loader to null in order to avoid