175 iter.remove(); 176 } 177 } 178 } 179 180 // Kill any pending flush 181 if (flushTimerTask != null) { 182 flushTimerTask.cancel(); 183 flushTimerTask = null; 184 } 185 186 // Clear changed file list. The changed files were guaranteed to 187 // have been in the cached file list (because there was a strong 188 // reference from changedFiles. 189 if (changedFiles != null) changedFiles.clear(); 190 191 return ok; 192 } 193 194 195 // Write all prefs changes to disk, but do not clear all cached prefs 196 // values. Also kills any scheduled flush task. 197 // There's no CFPreferencesFlush() (<rdar://problem/3049129>), so lots of cached prefs 198 // are cleared anyway. 199 static synchronized boolean flushWorld() 200 { 201 boolean ok = true; 202 203 if (changedFiles != null && !changedFiles.isEmpty()) { 204 Iterator iter = changedFiles.iterator(); 205 while (iter.hasNext()) { 206 MacOSXPreferencesFile f = (MacOSXPreferencesFile)iter.next(); 207 if (!f.synchronize()) ok = false; 208 } 209 210 changedFiles.clear(); 211 } 212 213 if (flushTimerTask != null) { 214 flushTimerTask.cancel(); | 175 iter.remove(); 176 } 177 } 178 } 179 180 // Kill any pending flush 181 if (flushTimerTask != null) { 182 flushTimerTask.cancel(); 183 flushTimerTask = null; 184 } 185 186 // Clear changed file list. The changed files were guaranteed to 187 // have been in the cached file list (because there was a strong 188 // reference from changedFiles. 189 if (changedFiles != null) changedFiles.clear(); 190 191 return ok; 192 } 193 194 195 // Sync only current user preferences 196 static synchronized boolean syncUser() { 197 boolean ok = true; 198 if (cachedFiles != null && !cachedFiles.isEmpty()) { 199 Iterator<WeakReference> iter = cachedFiles.values().iterator(); 200 while (iter.hasNext()) { 201 WeakReference ref = iter.next(); 202 MacOSXPreferencesFile f = (MacOSXPreferencesFile)ref.get(); 203 if (f != null && f.user == cfCurrentUser) { 204 if (!f.synchronize()) ok = false; 205 } else { 206 iter.remove(); 207 } 208 } 209 } 210 // Clear changed file list. The changed files were guaranteed to 211 // have been in the cached file list (because there was a strong 212 // reference from changedFiles. 213 if (changedFiles != null) { 214 Iterator<MacOSXPreferencesFile> iterChanged = changedFiles.iterator(); 215 while (iterChanged.hasNext()) { 216 MacOSXPreferencesFile f = iterChanged.next(); 217 if (f != null && f.user == cfCurrentUser) 218 iterChanged.remove(); 219 } 220 } 221 return ok; 222 } 223 224 225 226 227 // Write all prefs changes to disk, but do not clear all cached prefs 228 // values. Also kills any scheduled flush task. 229 // There's no CFPreferencesFlush() (<rdar://problem/3049129>), so lots of cached prefs 230 // are cleared anyway. 231 static synchronized boolean flushWorld() 232 { 233 boolean ok = true; 234 235 if (changedFiles != null && !changedFiles.isEmpty()) { 236 Iterator iter = changedFiles.iterator(); 237 while (iter.hasNext()) { 238 MacOSXPreferencesFile f = (MacOSXPreferencesFile)iter.next(); 239 if (!f.synchronize()) ok = false; 240 } 241 242 changedFiles.clear(); 243 } 244 245 if (flushTimerTask != null) { 246 flushTimerTask.cancel(); |