From 503c8a0932112420f06ecc6a427b8f6a2831bbed Mon Sep 17 00:00:00 2001 From: Dario Freni Date: Thu, 25 Apr 2019 10:57:50 +0100 Subject: [PATCH] Keep finalized staged sessions in session database Finalized staged sessions, i.e. sessions that are in isStagedSessionApplied and isStagedSessionFailed should be kept in the session database to allow inspection. Presently, a call to abandon() on a session in finalized state causes it to be removed from the database. Bug: 131290871 Test: atest CtsStagedInstallHostTestCases (see CL in same topic) Change-Id: I6860ea5b2501c992504c7434bb4988b58dacfe52 --- .../com/android/server/pm/PackageInstallerSession.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index 74fb4b27100e2..5f6e7399f3a75 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -2050,6 +2050,13 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { synchronized (mLock) { assertCallerIsOwnerOrRootLocked(); + if (isStagedAndInTerminalState()) { + // We keep the session in the database if it's in a finalized state. It will be + // removed by PackageInstallerService when the last update time is old enough. + // Also, in such cases cleanStageDir() has already been executed so no need to + // do it now. + return; + } if (mCommitted && params.isStaged) { synchronized (mLock) { mDestroyed = true;