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: 145840157
Change-Id: I163a3c6558117455038608e15065e076e2dd82d2
Merged-in: I163a3c6558117455038608e15065e076e2dd82d2
(cherry picked from commit 67ce22c57b)
This commit is contained in:
Gavin Corkery
2019-10-22 14:55:54 +01:00
parent f19eabddac
commit d0ae5c22d5

View File

@@ -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");
}