Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6e6cda32 authored by Rhed Jao's avatar Rhed Jao Committed by Android (Google) Code Review
Browse files

Merge "Fixed NPE in package installer session."

parents 747d4adb 1fc8b36c
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -259,11 +259,13 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
        // atomic install which needs to query sessions, which requires lock on mSessions.
        boolean isDeviceUpgrading = mPm.isDeviceUpgrading();
        for (PackageInstallerSession session : stagedSessionsToRestore) {
            if (isDeviceUpgrading && !session.isStagedAndInTerminalState()) {
            if (!session.isStagedAndInTerminalState() && session.hasParentSessionId()
                    && getSession(session.getParentSessionId()) == null) {
                session.setStagedSessionFailed(SessionInfo.STAGED_SESSION_ACTIVATION_FAILED,
                        "Build fingerprint has changed");
                        "An orphan staged session " + session.sessionId + " is found, "
                                + "parent " + session.getParentSessionId() + " is missing");
            }
            mStagingManager.restoreSession(session);
            mStagingManager.restoreSession(session, isDeviceUpgrading);
        }
        // Broadcasts are not sent while we restore sessions on boot, since no processes would be
        // ready to listen to them. From now on, we greedily assume that broadcasts requests are
+8 −1
Original line number Diff line number Diff line
@@ -889,7 +889,7 @@ public class StagingManager {
        return false;
    }

    void restoreSession(@NonNull PackageInstallerSession session) {
    void restoreSession(@NonNull PackageInstallerSession session, boolean isDeviceUpgrading) {
        PackageInstallerSession sessionToResume = session;
        synchronized (mStagedSessions) {
            mStagedSessions.append(session.sessionId, session);
@@ -906,6 +906,13 @@ public class StagingManager {
                }
            }
        }
        // The preconditions used during pre-reboot verification might have changed when device
        // is upgrading. Updated staged sessions to activation failed before we resume the session.
        if (isDeviceUpgrading && !sessionToResume.isStagedAndInTerminalState()) {
            sessionToResume.setStagedSessionFailed(SessionInfo.STAGED_SESSION_ACTIVATION_FAILED,
                        "Build fingerprint has changed");
            return;
        }
        checkStateAndResume(sessionToResume);
    }