diff options
| -rw-r--r-- | services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java | 45 |
1 files changed, 20 insertions, 25 deletions
diff --git a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java index ef4c12e8145a..1fd15d9e765f 100644 --- a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java +++ b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java @@ -469,44 +469,39 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { List<Rollback> restoreInProgress = new ArrayList<>(); Set<String> apexPackageNames = new HashSet<>(); synchronized (mLock) { - for (Rollback rollback : mRollbacks) { - if (rollback.isStaged()) { + Iterator<Rollback> iter = mRollbacks.iterator(); + while (iter.hasNext()) { + Rollback rollback = iter.next(); + if (!rollback.isStaged()) { + // We only care about staged rollbacks here + continue; + } + + PackageInstaller.SessionInfo session = mContext.getPackageManager() + .getPackageInstaller().getSessionInfo(rollback.getStagedSessionId()); + if (session == null || session.isStagedSessionFailed()) { + iter.remove(); + rollback.delete(mAppDataRollbackHelper); + continue; + } + + if (session.isStagedSessionApplied()) { if (rollback.isEnabling()) { enabling.add(rollback); } else if (rollback.isRestoreUserDataInProgress()) { restoreInProgress.add(rollback); } - - apexPackageNames.addAll(rollback.getApexPackageNames()); } + apexPackageNames.addAll(rollback.getApexPackageNames()); } } for (Rollback rollback : enabling) { - PackageInstaller installer = mContext.getPackageManager().getPackageInstaller(); - PackageInstaller.SessionInfo session = - installer.getSessionInfo(rollback.getStagedSessionId()); - if (session == null || session.isStagedSessionFailed()) { - // TODO: Do we need to remove this from - // mRollbacks, or is it okay to leave as - // unavailable until the next reboot when it will go - // away on its own? - rollback.delete(mAppDataRollbackHelper); - } else if (session.isStagedSessionApplied()) { - makeRollbackAvailable(rollback); - } + makeRollbackAvailable(rollback); } for (Rollback rollback : restoreInProgress) { - PackageInstaller installer = mContext.getPackageManager().getPackageInstaller(); - PackageInstaller.SessionInfo session = - installer.getSessionInfo(rollback.getStagedSessionId()); - // TODO: What if session is null? - if (session != null) { - if (session.isStagedSessionApplied() || session.isStagedSessionFailed()) { - rollback.setRestoreUserDataInProgress(false); - } - } + rollback.setRestoreUserDataInProgress(false); } for (String apexPackageName : apexPackageNames) { |