From 4e217ed3a3adc8ff57d434415cc89ce25f24c2b1 Mon Sep 17 00:00:00 2001 From: JW Wang Date: Tue, 28 Jul 2020 15:40:27 +0800 Subject: [PATCH] Don't set mDestroyed for a staged session This CL fixes the race condition in b/161647423#comment1. No matter setStagedSessionFailed() happens before or after destroyInternal(), it will not cause a staged session to disappear (by setting mDestroyed). In line with b/161647423#comment8, we want to keep staged sessions until they 1. get expired 2. abandoned before reaching the terminal state Bug: 161647423 Test: atest StagedInstallTest StagedInstallInternalTest Change-Id: I41b7030451086602c8439b50e4362a36007a49cb --- .../java/com/android/server/pm/PackageInstallerSession.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index fc94e08cc0e68..bd7f38d4f1100 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -3402,7 +3402,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { private void destroyInternal() { synchronized (mLock) { mSealed = true; - if (!params.isStaged || isStagedAndInTerminalState()) { + if (!params.isStaged) { mDestroyed = true; } // Force shut down all bridges