diff options
| -rw-r--r-- | services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java index c21c0a99f822..5c83c50b970f 100644 --- a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java +++ b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java @@ -780,6 +780,33 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { return enableRollbackForPackageSession(newRollback.rollback, packageSession); } + private void removeRollbackForPackageSessionId(int sessionId) { + if (LOCAL_LOGV) { + Slog.v(TAG, "removeRollbackForPackageSessionId=" + sessionId); + } + + synchronized (mLock) { + NewRollback newRollback = getNewRollbackForPackageSessionLocked(sessionId); + if (newRollback != null) { + Slog.w(TAG, "Delete new rollback id=" + newRollback.rollback.info.getRollbackId() + + " for session id=" + sessionId); + mNewRollbacks.remove(newRollback); + newRollback.rollback.delete(mAppDataRollbackHelper); + } + Iterator<Rollback> iter = mRollbacks.iterator(); + while (iter.hasNext()) { + Rollback rollback = iter.next(); + if (rollback.getStagedSessionId() == sessionId) { + Slog.w(TAG, "Delete rollback id=" + rollback.info.getRollbackId() + + " for session id=" + sessionId); + iter.remove(); + rollback.delete(mAppDataRollbackHelper); + break; + } + } + } + } + /** * Do code and userdata backups to enable rollback of the given session. * In case of multiPackage sessions, <code>session</code> should be one of @@ -1110,7 +1137,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { } } } else { - // TODO: delete rollbacks for this failed session + removeRollbackForPackageSessionId(sessionId); } // Clear the queue so it will never be leaked to next tests. |