From 7ee3a1fec3458adff4aa16fe92485c4cb6c548b4 Mon Sep 17 00:00:00 2001 From: Jing Ji Date: Wed, 15 Sep 2021 14:47:47 -0700 Subject: [PATCH] Fix potential race condition due to missing lock Bug: 194991626 Test: atest ProcStatsValidationTests Test: atest ProcessStatsDumpsysTest Test: CtsIncidentHostTestCases:ProcStatsProtoTest Change-Id: I1dc7c03d031248fb945dc2cf9dd47ad590ec672c Merged-In: I1dc7c03d031248fb945dc2cf9dd47ad590ec672c --- .../core/java/com/android/server/am/ActiveServices.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java index a2fec2753340d..a29a49cb07d82 100644 --- a/services/core/java/com/android/server/am/ActiveServices.java +++ b/services/core/java/com/android/server/am/ActiveServices.java @@ -4906,7 +4906,9 @@ public final class ActiveServices { sr.setProcess(null, null, 0, null); sr.isolatedProc = null; sr.executeNesting = 0; - sr.forceClearTracker(); + synchronized (mAm.mProcessStats.mLock) { + sr.forceClearTracker(); + } if (mDestroyingServices.remove(sr)) { if (DEBUG_SERVICE) Slog.v(TAG_SERVICE, "killServices remove destroying " + sr); } @@ -5056,7 +5058,9 @@ public final class ActiveServices { i--; ServiceRecord sr = mDestroyingServices.get(i); if (sr.app == app) { - sr.forceClearTracker(); + synchronized (mAm.mProcessStats.mLock) { + sr.forceClearTracker(); + } mDestroyingServices.remove(i); if (DEBUG_SERVICE) Slog.v(TAG_SERVICE, "killServices remove destroying " + sr); }