Loading services/core/java/com/android/server/pm/PackageInstallerService.java +5 −3 Original line number Diff line number Diff line Loading @@ -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 Loading services/core/java/com/android/server/pm/StagingManager.java +8 −1 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); } Loading Loading
services/core/java/com/android/server/pm/PackageInstallerService.java +5 −3 Original line number Diff line number Diff line Loading @@ -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 Loading
services/core/java/com/android/server/pm/StagingManager.java +8 −1 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); } Loading