summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Songchun Fan <schfan@google.com> 2022-01-11 23:31:01 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-01-11 23:31:01 +0000
commit5bf4a3f29e2dda513b227188867b58abcc4e51db (patch)
tree98c832aa03a5033ab7f7769bea247b1efa0925a0
parent331b61794982778acd140eeae5047730072c93d5 (diff)
parenta4ef9e0e00416d8e211bd749da42033ae4fd9eb2 (diff)
Merge "Don't abandon child sessions (1/n)" into qt-dev
-rw-r--r--services/core/java/com/android/server/pm/PackageInstallerService.java8
1 files changed, 7 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index a096f2252680..2bd561a382ee 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -330,7 +330,13 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
if (age >= MAX_SESSION_AGE_ON_LOW_STORAGE_MILLIS) {
// Aggressively close old sessions because we are running low on storage
// Their staging dirs will be removed too
- session.abandon();
+ PackageInstallerSession root = !session.hasParentSessionId()
+ ? session : mSessions.get(session.getParentSessionId());
+ if (!root.isDestroyed() &&
+ (!root.isStaged() || (root.isStaged() && root.isStagedSessionReady())))
+ {
+ root.abandon();
+ }
} else {
// Session is new enough, so it deserves to be kept even on low storage
unclaimedStagingDirsOnVolume.remove(session.stageDir);