summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java45
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) {