Merge "Fix NPE caused by orphaned child sessions"
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index 7c8515b..4767d3a 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -1461,8 +1461,9 @@
         private TreeMap<PackageInstallerSession, TreeSet<PackageInstallerSession>> mSessionMap;
 
         private final Comparator<PackageInstallerSession> mSessionCreationComparator =
-                Comparator.comparingLong((PackageInstallerSession sess) -> sess.createdMillis)
-                          .thenComparingInt(sess -> sess.sessionId);
+                Comparator.comparingLong(
+                        (PackageInstallerSession sess) -> sess != null ? sess.createdMillis : -1)
+                        .thenComparingInt(sess -> sess != null ? sess.sessionId : -1);
 
         ParentChildSessionMap() {
             mSessionMap = new TreeMap<>(mSessionCreationComparator);
@@ -1500,10 +1501,12 @@
             for (Map.Entry<PackageInstallerSession, TreeSet<PackageInstallerSession>> entry
                     : mSessionMap.entrySet()) {
                 PackageInstallerSession parentSession = entry.getKey();
-                pw.print(tag + " ");
-                parentSession.dump(pw);
-                pw.println();
-                pw.increaseIndent();
+                if (parentSession != null) {
+                    pw.print(tag + " ");
+                    parentSession.dump(pw);
+                    pw.println();
+                    pw.increaseIndent();
+                }
 
                 for (PackageInstallerSession childSession : entry.getValue()) {
                     pw.print(tag + " Child ");