diff options
| author | 2022-08-11 21:29:12 +0000 | |
|---|---|---|
| committer | 2022-08-11 21:29:12 +0000 | |
| commit | 3a11a2df7dd3eb7802af2aeeb87bfda70d3c5d08 (patch) | |
| tree | c1e7d19c3b4fb4c7d5982cb2fb7e28ad36b12ecd | |
| parent | 688a65880d9ae2337861f6043defb60d5da5cf26 (diff) | |
| parent | 92cffb3fd8911199edddf8136c7aa76edb952fbb (diff) | |
Merge "Fix for out of bounds exception in CachedAppOptimizer"
| -rw-r--r-- | services/core/java/com/android/server/am/CachedAppOptimizer.java | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java index 45265ac0c8f3..363c9d0a963a 100644 --- a/services/core/java/com/android/server/am/CachedAppOptimizer.java +++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java @@ -1392,25 +1392,17 @@ public final class CachedAppOptimizer { void cancelAllCompactions(CancelCompactReason reason) { synchronized (mProcLock) { - int size = mPendingCompactionProcesses.size(); - ProcessRecord record; - for (int i=0; i < size; ++i) { - record = mPendingCompactionProcesses.get(i); - cancelCompactionForProcess(record, reason); - // The process record is kept alive after compactions are cleared, - // so make sure to reset the compaction state to avoid skipping any future - // compactions due to a stale value here. - record.mOptRecord.setHasPendingCompact(false); + while(!mPendingCompactionProcesses.isEmpty()) { + cancelCompactionForProcess(mPendingCompactionProcesses.get(0), reason); } mPendingCompactionProcesses.clear(); } - cancelCompaction(); } @GuardedBy("mProcLock") void cancelCompactionForProcess(ProcessRecord app, CancelCompactReason cancelReason) { boolean cancelled = false; - if (!mPendingCompactionProcesses.isEmpty() && mPendingCompactionProcesses.contains(app)) { + if (mPendingCompactionProcesses.contains(app)) { app.mOptRecord.setHasPendingCompact(false); mPendingCompactionProcesses.remove(app); cancelled = true; |