From a0326c86ad318483ce05c30290fdba72c7b6e33d Mon Sep 17 00:00:00 2001 From: Misha Wagner Date: Tue, 10 Aug 2021 14:12:48 +0100 Subject: [PATCH] Fix race condition when using mPreserveTopNApps. Bug: 191357172 Test: atest CacheOomRankerTest Change-Id: I8cdf96ed1ddf56261e6ee953fb1078e961a0bc41 --- .../java/com/android/server/am/CacheOomRanker.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/am/CacheOomRanker.java b/services/core/java/com/android/server/am/CacheOomRanker.java index 1ead7e3c589fe..bd7ee019e1eec 100644 --- a/services/core/java/com/android/server/am/CacheOomRanker.java +++ b/services/core/java/com/android/server/am/CacheOomRanker.java @@ -243,6 +243,7 @@ public class CacheOomRanker { float lruWeight; float usesWeight; float rssWeight; + int preserveTopNApps; int[] lruPositions; RankedProcessRecord[] scoredProcessRecords; @@ -250,6 +251,7 @@ public class CacheOomRanker { lruWeight = mLruWeight; usesWeight = mUsesWeight; rssWeight = mRssWeight; + preserveTopNApps = mPreserveTopNApps; lruPositions = mLruPositions; scoredProcessRecords = mScoredProcessRecords; } @@ -276,19 +278,19 @@ public class CacheOomRanker { ++numProcessesEvaluated; } - // Count how many apps we're not re-ranking (up to mPreserveTopNApps). + // Count how many apps we're not re-ranking (up to preserveTopNApps). int numProcessesNotReRanked = 0; while (numProcessesEvaluated < lruProcessServiceStart - && numProcessesNotReRanked < mPreserveTopNApps) { + && numProcessesNotReRanked < preserveTopNApps) { ProcessRecord process = lruList.get(numProcessesEvaluated); if (appCanBeReRanked(process)) { numProcessesNotReRanked++; } numProcessesEvaluated++; } - // Exclude the top `mPreserveTopNApps` apps from re-ranking. - if (numProcessesNotReRanked < mPreserveTopNApps) { - numProcessesReRanked -= mPreserveTopNApps - numProcessesNotReRanked; + // Exclude the top `preserveTopNApps` apps from re-ranking. + if (numProcessesNotReRanked < preserveTopNApps) { + numProcessesReRanked -= preserveTopNApps - numProcessesNotReRanked; if (numProcessesReRanked < 0) { numProcessesReRanked = 0; }