188 // reference from changedFiles. |
188 // reference from changedFiles. |
189 if (changedFiles != null) changedFiles.clear(); |
189 if (changedFiles != null) changedFiles.clear(); |
190 |
190 |
191 return ok; |
191 return ok; |
192 } |
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()) { |
|
205 ok = false; |
|
206 } |
|
207 } else { |
|
208 iter.remove(); |
|
209 } |
|
210 } |
|
211 } |
|
212 // Remove synchronized file from changed file list. The changed files were |
|
213 // guaranteed to have been in the cached file list (because there was a strong |
|
214 // reference from changedFiles. |
|
215 if (changedFiles != null) { |
|
216 Iterator<MacOSXPreferencesFile> iterChanged = changedFiles.iterator(); |
|
217 while (iterChanged.hasNext()) { |
|
218 MacOSXPreferencesFile f = iterChanged.next(); |
|
219 if (f != null && f.user == cfCurrentUser) |
|
220 iterChanged.remove(); |
|
221 } |
|
222 } |
|
223 return ok; |
|
224 } |
|
225 |
193 |
226 |
194 |
227 |
195 // Write all prefs changes to disk, but do not clear all cached prefs |
228 // Write all prefs changes to disk, but do not clear all cached prefs |
196 // values. Also kills any scheduled flush task. |
229 // values. Also kills any scheduled flush task. |
197 // There's no CFPreferencesFlush() (<rdar://problem/3049129>), so lots of cached prefs |
230 // There's no CFPreferencesFlush() (<rdar://problem/3049129>), so lots of cached prefs |