Merge "Fix package cleanup when parsed APK missing." into nyc-dev

am: b3b7763d5d

* commit 'b3b7763d5d35f4e85f3c5245abb9ab526b0e4c23':
  Fix package cleanup when parsed APK missing.

Change-Id: If387d9dc16358af03e95693e9794bfe6bbfa22b6
This commit is contained in:
Jeff Sharkey
2016-05-10 00:32:06 +00:00
committed by android-build-merger

View File

@@ -15453,9 +15453,18 @@ public class PackageManagerService extends IPackageManager.Stub {
removePackageLI(ps, (flags & REMOVE_CHATTY) != 0);
if ((flags & PackageManager.DELETE_KEEP_DATA) == 0) {
destroyAppDataLIF(deletedPkg, UserHandle.USER_ALL,
final PackageParser.Package resolvedPkg;
if (deletedPkg != null) {
resolvedPkg = deletedPkg;
} else {
// We don't have a parsed package when it lives on an ejected
// adopted storage device, so fake something together
resolvedPkg = new PackageParser.Package(ps.name);
resolvedPkg.setVolumeUuid(ps.volumeUuid);
}
destroyAppDataLIF(resolvedPkg, UserHandle.USER_ALL,
StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE);
destroyAppProfilesLIF(deletedPkg);
destroyAppProfilesLIF(resolvedPkg);
if (outInfo != null) {
outInfo.dataRemoved = true;
}
@@ -19610,6 +19619,7 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
final String label;
final int targetSdkVersion;
final PackageFreezer freezer;
final int[] installedUserIds;
// reader
synchronized (mPackages) {
@@ -19664,6 +19674,7 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
label = String.valueOf(pm.getApplicationLabel(pkg.applicationInfo));
targetSdkVersion = pkg.applicationInfo.targetSdkVersion;
freezer = new PackageFreezer(packageName, "movePackageInternal");
installedUserIds = ps.queryInstalledUsers(sUserManager.getUserIds(), true);
}
final Bundle extras = new Bundle();
@@ -19701,10 +19712,12 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
final PackageStats stats = new PackageStats(null, -1);
synchronized (mInstaller) {
if (!getPackageSizeInfoLI(packageName, -1, stats)) {
freezer.close();
throw new PackageManagerException(MOVE_FAILED_INTERNAL_ERROR,
"Failed to measure package size");
for (int userId : installedUserIds) {
if (!getPackageSizeInfoLI(packageName, userId, stats)) {
freezer.close();
throw new PackageManagerException(MOVE_FAILED_INTERNAL_ERROR,
"Failed to measure package size");
}
}
}