Bug 789945: Part 3. Flush late in the shutdown, to give a last save a chance to complete and for the flush to not be blocking. r=bsmedberg"
MozReview-Commit-ID: 7w5Y16C7mTn
This commit is contained in:
@@ -748,6 +748,7 @@ Preferences::Init()
|
|||||||
if (!observerService)
|
if (!observerService)
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
|
observerService->AddObserver(this, "profile-before-change-telemetry", true);
|
||||||
rv = observerService->AddObserver(this, "profile-before-change", true);
|
rv = observerService->AddObserver(this, "profile-before-change", true);
|
||||||
|
|
||||||
observerService->AddObserver(this, "load-extension-defaults", true);
|
observerService->AddObserver(this, "load-extension-defaults", true);
|
||||||
@@ -776,6 +777,10 @@ Preferences::Observe(nsISupports *aSubject, const char *aTopic,
|
|||||||
|
|
||||||
if (!nsCRT::strcmp(aTopic, "profile-before-change")) {
|
if (!nsCRT::strcmp(aTopic, "profile-before-change")) {
|
||||||
rv = SavePrefFile(nullptr);
|
rv = SavePrefFile(nullptr);
|
||||||
|
} else if (!nsCRT::strcmp(aTopic, "profile-before-change-telemetry")) {
|
||||||
|
if (AllowOffMainThreadSave()) {
|
||||||
|
PreferencesWriter::Flush();
|
||||||
|
}
|
||||||
} else if (!strcmp(aTopic, "load-extension-defaults")) {
|
} else if (!strcmp(aTopic, "load-extension-defaults")) {
|
||||||
pref_LoadPrefsInDirList(NS_EXT_PREFS_DEFAULTS_DIR_LIST);
|
pref_LoadPrefsInDirList(NS_EXT_PREFS_DEFAULTS_DIR_LIST);
|
||||||
} else if (!nsCRT::strcmp(aTopic, "reload-default-prefs")) {
|
} else if (!nsCRT::strcmp(aTopic, "reload-default-prefs")) {
|
||||||
@@ -785,7 +790,7 @@ Preferences::Observe(nsISupports *aSubject, const char *aTopic,
|
|||||||
// Our process is being suspended. The OS may wake our process later,
|
// Our process is being suspended. The OS may wake our process later,
|
||||||
// or it may kill the process. In case our process is going to be killed
|
// or it may kill the process. In case our process is going to be killed
|
||||||
// from the suspended state, we save preferences before suspending.
|
// from the suspended state, we save preferences before suspending.
|
||||||
rv = SavePrefFile(nullptr);
|
rv = SavePrefFileBlocking();
|
||||||
}
|
}
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
@@ -802,6 +807,12 @@ Preferences::ReadUserPrefs(nsIFile *aFile)
|
|||||||
nsresult rv;
|
nsresult rv;
|
||||||
|
|
||||||
if (nullptr == aFile) {
|
if (nullptr == aFile) {
|
||||||
|
// We should not be re-reading the user preferences, but if we
|
||||||
|
// are going to try, make sure there are no outstanding saves
|
||||||
|
if (AllowOffMainThreadSave()) {
|
||||||
|
PreferencesWriter::Flush();
|
||||||
|
}
|
||||||
|
|
||||||
rv = UseDefaultPrefFile();
|
rv = UseDefaultPrefFile();
|
||||||
// A user pref file is optional.
|
// A user pref file is optional.
|
||||||
// Ignore all errors related to it, so we retain 'rv' value :-|
|
// Ignore all errors related to it, so we retain 'rv' value :-|
|
||||||
@@ -1123,6 +1134,13 @@ Preferences::ReadAndOwnUserPrefFile(nsIFile *aFile)
|
|||||||
|
|
||||||
if (mCurrentFile == aFile)
|
if (mCurrentFile == aFile)
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
||||||
|
// Since we're changing the pref file, we may have to make
|
||||||
|
// sure the outstanding writes are handled first.
|
||||||
|
if (AllowOffMainThreadSave()) {
|
||||||
|
PreferencesWriter::Flush();
|
||||||
|
}
|
||||||
|
|
||||||
mCurrentFile = aFile;
|
mCurrentFile = aFile;
|
||||||
|
|
||||||
nsresult rv = NS_OK;
|
nsresult rv = NS_OK;
|
||||||
|
|||||||
Reference in New Issue
Block a user