From 67ce22c57b51e7e41c667f51ad3de73cffbeb799 Mon Sep 17 00:00:00 2001 From: Gavin Corkery Date: Tue, 22 Oct 2019 14:55:54 +0100 Subject: [PATCH] Don't mark terminal staged sessions as failed Currently we mark sessions in an already-terminal state (applied or failed) as failed when there is a build fingerprint change. This can cause issues with trying to clean a non-existent directory. Change this logic to check the status of the session when marking as failed. Test: atest StagedInstallTest Bug: 142963471 Change-Id: I163a3c6558117455038608e15065e076e2dd82d2 --- .../java/com/android/server/pm/PackageInstallerService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java index 00c0566a1c4cf..ed2bb3d53649e 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerService.java +++ b/services/core/java/com/android/server/pm/PackageInstallerService.java @@ -259,7 +259,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements // Don't hold mSessions lock when calling restoreSession, since it might trigger an APK // atomic install which needs to query sessions, which requires lock on mSessions. for (PackageInstallerSession session : stagedSessionsToRestore) { - if (mPm.isDeviceUpgrading()) { + if (mPm.isDeviceUpgrading() && !session.isStagedAndInTerminalState()) { session.setStagedSessionFailed(SessionInfo.STAGED_SESSION_ACTIVATION_FAILED, "Build fingerprint has changed"); }