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