Bug 1357366 - Avoid a possible crash loop in Places Database corruption handling. r=past draft
authorMarco Bonardo <mbonardo@mozilla.com>
Tue, 18 Apr 2017 14:02:43 +0200
changeset 564198 c6cc5beb77483549183c02dc1a33bad2864e83a9
parent 563802 a374c35469935a874fefe64d3e07003fc5bc8884
child 624704 a4838dd3aa3adbb3337dcc87cc76165e8ce8cd4d
push id54562
push usermak77@bonardo.net
push dateTue, 18 Apr 2017 12:06:24 +0000
reviewerspast
bugs1357366
milestone55.0a1
Bug 1357366 - Avoid a possible crash loop in Places Database corruption handling. r=past MozReview-Commit-ID: BIN3ji68nAY
toolkit/components/places/Database.cpp
--- a/toolkit/components/places/Database.cpp
+++ b/toolkit/components/places/Database.cpp
@@ -810,19 +810,23 @@ Database::BackupAndReplaceDatabaseFile(n
 
   return NS_OK;
 }
 
 nsresult
 Database::ForceCrashAndReplaceDatabase(const nsCString& aReason)
 {
   Preferences::SetBool(PREF_FORCE_DATABASE_REPLACEMENT, true);
-  // We could force an application restart here, but we'd like to get these
-  // cases reported to us, so let's force a crash instead.
-  MOZ_CRASH_UNSAFE_OOL(aReason.get());
+  // Ensure that prefs get saved, or we could crash before storing them.
+  nsIPrefService* prefService = Preferences::GetService();
+  if (prefService && NS_SUCCEEDED(prefService->SavePrefFile(nullptr))) {
+    // We could force an application restart here, but we'd like to get these
+    // cases reported to us, so let's force a crash instead.
+    MOZ_CRASH_UNSAFE_OOL(aReason.get());
+  }
   return NS_ERROR_FAILURE;
 }
 
 nsresult
 Database::InitSchema(bool* aDatabaseMigrated)
 {
   MOZ_ASSERT(NS_IsMainThread());
   *aDatabaseMigrated = false;