summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorAndroid (Google) Code Review <android-gerrit@google.com>2009-10-20 18:51:06 -0400
committerAndroid (Google) Code Review <android-gerrit@google.com>2009-10-20 18:51:06 -0400
commit5b48223d0e8b8becea0c120895d964e6472b3552 (patch)
treed91210393f67a4b30ebded68786ed2f7b912039e /services
parent617262d8f57362536ddc00a070c1c0994741de44 (diff)
parent14e833faa0d7a4754ddc9b3ae323a3935cb50af5 (diff)
downloadframeworks_base-5b48223d0e8b8becea0c120895d964e6472b3552.zip
frameworks_base-5b48223d0e8b8becea0c120895d964e6472b3552.tar.gz
frameworks_base-5b48223d0e8b8becea0c120895d964e6472b3552.tar.bz2
Merge change I14e833fa into eclair
* changes: If we fail to persist the current settings and fall back to the back settings file when reading settings in PackageManager, we might rename the corrupted settings to backup(in case of power failure between the earlier write failure and file deletion) and end up loosing both files. So just clear up the corrupted current settings file if we have backup. The backup wouldn't exist if everything went well with persisting the earlier settings.
Diffstat (limited to 'services')
-rw-r--r--services/java/com/android/server/PackageManagerService.java24
1 files changed, 18 insertions, 6 deletions
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index 66e7ecd..5f30b3d 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -6440,12 +6440,17 @@ class PackageManagerService extends IPackageManager.Stub {
// Keep the old settings around until we know the new ones have
// been successfully written.
if (mSettingsFilename.exists()) {
- if (mBackupSettingsFilename.exists()) {
- mBackupSettingsFilename.delete();
- }
- if (!mSettingsFilename.renameTo(mBackupSettingsFilename)) {
- Log.w(TAG, "Unable to backup package manager settings, current changes will be lost at reboot");
- return;
+ // Presence of backup settings file indicates that we failed
+ // to persist settings earlier. So preserve the older
+ // backup for future reference since the current settings
+ // might have been corrupted.
+ if (!mBackupSettingsFilename.exists()) {
+ if (!mSettingsFilename.renameTo(mBackupSettingsFilename)) {
+ Log.w(TAG, "Unable to backup package manager settings, current changes will be lost at reboot");
+ return;
+ }
+ } else {
+ Log.w(TAG, "Preserving older settings backup");
}
}
@@ -6712,6 +6717,13 @@ class PackageManagerService extends IPackageManager.Stub {
str = new FileInputStream(mBackupSettingsFilename);
mReadMessages.append("Reading from backup settings file\n");
Log.i(TAG, "Reading from backup settings file!");
+ if (mSettingsFilename.exists()) {
+ // If both the backup and settings file exist, we
+ // ignore the settings since it might have been
+ // corrupted.
+ Log.w(TAG, "Cleaning up settings file " + mSettingsFilename);
+ mSettingsFilename.delete();
+ }
} catch (java.io.IOException e) {
// We'll try for the normal settings file.
}