diff options
| author | 2022-01-03 15:43:54 +0800 | |
|---|---|---|
| committer | 2022-01-05 10:40:08 +0000 | |
| commit | 8b67e7db79d15ab448ae8f00b40a4a350ab3d537 (patch) | |
| tree | a5ed70bd29818dfba1402e4d34d22a97cd5a73ef | |
| parent | 6a4c2b653e10381356c2e2b326a93974a647f178 (diff) | |
Don't abandon child sessions (1/n)
It will throw if abandon() is called on a child session.
Bug: 211944991
Bug: 212665855
Bug: 67862680
Test: to be added
Change-Id: Ib0ba9f3786dda2d3174f3ea8c65d1061a3fcb586
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageInstallerService.java | 6 |
1 files changed, 5 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 f4740448b8a9..ae3352f4972e 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerService.java +++ b/services/core/java/com/android/server/pm/PackageInstallerService.java @@ -404,7 +404,11 @@ 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.abandon(); + } } else { // Session is new enough, so it deserves to be kept even on low storage unclaimedStagingDirsOnVolume.remove(session.stageDir); |