From dc1f92192adcd92a025085da642fc88905f13b33 Mon Sep 17 00:00:00 2001 From: JW Wang Date: Fri, 7 Feb 2020 14:59:51 +0800 Subject: [PATCH] Rewrite the broadcast receiver for ACTION_CANCEL_ENABLE_ROLLBACK (1/n) It makes sense to remove a rollback when ACTION_CANCEL_ENABLE_ROLLBACK is received no matter it is a new rollback or not. For the sake of defensive programming, we don't want to remove a rollback which is already made available or committed. Bug: 149069841 Test: atest RollbackTest Change-Id: I3d8004916e9438bc03fcb0c71a83617411be7379 --- .../server/rollback/RollbackManagerServiceImpl.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java index a63f921f65731..1188a342793b1 100644 --- a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java +++ b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java @@ -235,17 +235,14 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { Slog.v(TAG, "broadcast=ACTION_CANCEL_ENABLE_ROLLBACK token=" + token); } synchronized (mLock) { - Rollback found = null; - for (Rollback rollback : mRollbacks) { - if (rollback.isNewRollback() && rollback.hasToken(token)) { - found = rollback; + for (int i = 0; i < mRollbacks.size(); ++i) { + Rollback rollback = mRollbacks.get(i); + if (rollback.hasToken(token) && rollback.isEnabling()) { + mRollbacks.remove(i); + rollback.delete(mAppDataRollbackHelper); break; } } - if (found != null) { - mRollbacks.remove(found); - found.delete(mAppDataRollbackHelper); - } } } }