diff options
author | Jeff Sharkey <jsharkey@android.com> | 2014-10-03 16:48:11 -0700 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2014-10-03 16:48:11 -0700 |
commit | 914bd793b3415a198d0cb4216ff9da0a184ab803 (patch) | |
tree | bd17bb0d41ffe0060afd483c6959f1e0a9bb5af8 | |
parent | 3933a5dc8c8c04458c5b8c01919d7449c6d00497 (diff) | |
download | frameworks_base-914bd793b3415a198d0cb4216ff9da0a184ab803.zip frameworks_base-914bd793b3415a198d0cb4216ff9da0a184ab803.tar.gz frameworks_base-914bd793b3415a198d0cb4216ff9da0a184ab803.tar.bz2 |
Correctly rollback failed system app installs.
Fix bug where we disabled system app, but never turned it back on
when the scanPackageLI() failed.
Bug: 17805839
Change-Id: I73999263aee703af187afd980fa0d0ce8451cf0c
-rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index bac1de1..d90be0b 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -9970,6 +9970,7 @@ public class PackageManagerService extends IPackageManager.Stub { String installerPackageName, PackageInstalledInfo res) { if (DEBUG_INSTALL) Slog.d(TAG, "replaceSystemPackageLI: new=" + pkg + ", old=" + deletedPackage); + boolean disabledSystem = false; boolean updatedSettings = false; parseFlags |= PackageParser.PARSE_IS_SYSTEM; if ((deletedPackage.applicationInfo.flags&ApplicationInfo.FLAG_PRIVILEGED) != 0) { @@ -10003,7 +10004,8 @@ public class PackageManagerService extends IPackageManager.Stub { removePackageLI(oldPkgSetting, true); // writer synchronized (mPackages) { - if (!mSettings.disableSystemPackageLPw(packageName) && deletedPackage != null) { + disabledSystem = mSettings.disableSystemPackageLPw(packageName); + if (!disabledSystem && deletedPackage != null) { // We didn't need to disable the .apk as a current system package, // which means we are replacing another update that is already // installed. We need to make sure to delete the older one's .apk. @@ -10062,9 +10064,11 @@ public class PackageManagerService extends IPackageManager.Stub { Slog.e(TAG, "Failed to restore original package: " + e.getMessage()); } // Restore the old system information in Settings - synchronized(mPackages) { - if (updatedSettings) { + synchronized (mPackages) { + if (disabledSystem) { mSettings.enableSystemPackageLPw(packageName); + } + if (updatedSettings) { mSettings.setInstallerPackageName(packageName, oldPkgSetting.installerPackageName); } |