From fb6688e3feb8a68e7da19e04967d26c0b3e5e78c Mon Sep 17 00:00:00 2001 From: Nikita Ioffe Date: Wed, 27 Feb 2019 15:34:08 +0000 Subject: [PATCH] Fail staged session if apexd session is in ROLLBACK_IN_PROGRESS state This covers a (very unlikely) scenario, in which device was rebooted during apexd rollback, and apexd wasn't able to resume rollback after the reboot. For a tiny bit more context see: aosp/912794 Bug: 123622800 Test: none Change-Id: Idbb142dce2dbc85b818ba42e93ab107e4955301d --- services/core/java/com/android/server/pm/StagingManager.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java index fac383945afd2..f6de16a87eed0 100644 --- a/services/core/java/com/android/server/pm/StagingManager.java +++ b/services/core/java/com/android/server/pm/StagingManager.java @@ -491,8 +491,10 @@ public class StagingManager { } private static boolean isApexSessionFailed(ApexSessionInfo apexSessionInfo) { + // isRollbackInProgress is included to cover the scenario, when a device is rebooted in + // during the rollback, and apexd fails to resume the rollback after reboot. return apexSessionInfo.isActivationFailed || apexSessionInfo.isUnknown - || apexSessionInfo.isRolledBack; + || apexSessionInfo.isRolledBack || apexSessionInfo.isRollbackInProgress; } @GuardedBy("mStagedSessions")