From 806ccabb73e93ad08a5284a7d651d6827aefc6ac Mon Sep 17 00:00:00 2001 From: Mohammad Samiul Islam Date: Fri, 19 Jun 2020 13:26:34 +0100 Subject: [PATCH] Allow staging multi-package session immediately after abandonment When we stage a session, we compare it with other already staged sessions to detect overlap. We do not allow a session to stage if it contains a package which is already staged in another session. Due to a bug, while comparing we were not excluding sessions whose parents were abandoned already. This CL fixes that. Bug: 159409632 Test: atest StagedInstallTest#testStageAnotherSessionImmediatelyAfterAbandonMultiPackage Change-Id: I740986af666b3d2d8ab832c4bcdb855c1ed3c16f --- .../core/java/com/android/server/pm/StagingManager.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java index 8ccf837f64dc7..12b9687bccd1b 100644 --- a/services/core/java/com/android/server/pm/StagingManager.java +++ b/services/core/java/com/android/server/pm/StagingManager.java @@ -969,19 +969,19 @@ public class StagingManager { // name and the session we are checking is not a parent session either. continue; } - - // From here on, stagedSession is a non-parent active staged session - // Check if stagedSession has an active parent session or not if (stagedSession.hasParentSessionId()) { int parentId = stagedSession.getParentSessionId(); PackageInstallerSession parentSession = mStagedSessions.get(parentId); - if (parentSession == null || parentSession.isStagedAndInTerminalState()) { + if (parentSession == null || parentSession.isStagedAndInTerminalState() + || parentSession.isDestroyed()) { // Parent session has been abandoned or terminated already continue; } } + // From here on, stagedSession is a non-parent active staged session + // Check if session is one of the active sessions if (session.sessionId == stagedSession.sessionId) { Slog.w(TAG, "Session " + session.sessionId + " is already staged");