summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2014-10-03 16:48:11 -0700
committerJeff Sharkey <jsharkey@android.com>2014-10-03 16:48:11 -0700
commit914bd793b3415a198d0cb4216ff9da0a184ab803 (patch)
treebd17bb0d41ffe0060afd483c6959f1e0a9bb5af8
parent3933a5dc8c8c04458c5b8c01919d7449c6d00497 (diff)
downloadframeworks_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.java10
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);
}