diff options
| -rw-r--r-- | services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java index ddbd9c9266d0..a671e5f9a150 100644 --- a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java +++ b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java @@ -118,6 +118,10 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { @GuardedBy("mLock") private final List<Rollback> mRollbacks; + // Apk sessions from a staged session with no matching rollback. + @GuardedBy("mLock") + private final IntArray mOrphanedApkSessionIds = new IntArray(); + private final RollbackStore mRollbackStore; private final Context mContext; @@ -655,6 +659,11 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { // hasn't actually been updated. onPackageReplaced(apexPackageName); } + + synchronized (mLock) { + mOrphanedApkSessionIds.clear(); + } + mPackageHealthObserver.onBootCompletedAsync(); }); } @@ -865,6 +874,16 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { } } + // Check to see if this is the apk session for a staged session for which rollback was + // cancelled. + synchronized (mLock) { + if (mOrphanedApkSessionIds.indexOf(parentSession.getSessionId()) != -1) { + Slog.w(TAG, "Not enabling rollback for apk as no matching staged session " + + "rollback exists"); + return false; + } + } + NewRollback newRollback; synchronized (mLock) { // See if we already have a NewRollback that contains this package @@ -1122,6 +1141,13 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { break; } } + if (rollback == null) { + // Did not find rollback matching originalSessionId. + Slog.e(TAG, "notifyStagedApkSession did not find rollback for session " + + originalSessionId + + ". Adding orphaned apk session " + apkSessionId); + mOrphanedApkSessionIds.add(apkSessionId); + } } if (rollback != null) { |