diff options
| author | 2020-08-18 09:46:25 +0000 | |
|---|---|---|
| committer | 2020-08-18 09:46:25 +0000 | |
| commit | d965f65fc1ee404f799d3c5f811bedd86251c2c7 (patch) | |
| tree | b7a65d2910a512cca2e21ced8b22e20b363736aa | |
| parent | a0640ea9cc286494a7120c25cc863c09c43e8ed8 (diff) | |
| parent | b221b040c9ddba69f3f8e06ca3ca11e765b85871 (diff) | |
Merge "Dump orphaned sessions is separate block"
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageInstallerService.java | 24 |
1 files changed, 23 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 8af74631fb2e..4b246c3b330c 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerService.java +++ b/services/core/java/com/android/server/pm/PackageInstallerService.java @@ -1284,14 +1284,21 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements pw.increaseIndent(); List<PackageInstallerSession> finalizedSessions = new ArrayList<>(); + List<PackageInstallerSession> orphanedChildSessions = new ArrayList<>(); int N = mSessions.size(); for (int i = 0; i < N; i++) { final PackageInstallerSession session = mSessions.valueAt(i); - // Do not print finalized staged session as active install sessions final PackageInstallerSession rootSession = session.hasParentSessionId() ? getSession(session.getParentSessionId()) : session; + // Do not print orphaned child sessions as active install sessions + if (rootSession == null) { + orphanedChildSessions.add(session); + continue; + } + + // Do not print finalized staged session as active install sessions if (rootSession.isStagedAndInTerminalState()) { finalizedSessions.add(session); continue; @@ -1303,6 +1310,21 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements pw.println(); pw.decreaseIndent(); + if (!orphanedChildSessions.isEmpty()) { + // Presence of orphaned sessions indicate leak in cleanup for multi-package and + // should be cleaned up. + pw.println("Orphaned install sessions:"); + pw.increaseIndent(); + N = orphanedChildSessions.size(); + for (int i = 0; i < N; i++) { + final PackageInstallerSession session = orphanedChildSessions.get(i); + session.dump(pw); + pw.println(); + } + pw.println(); + pw.decreaseIndent(); + } + pw.println("Finalized install sessions:"); pw.increaseIndent(); N = finalizedSessions.size(); |