diff options
| author | 2025-01-18 03:37:55 -0800 | |
|---|---|---|
| committer | 2025-01-18 03:37:55 -0800 | |
| commit | aabbc788ff7bac5af1c1f23f0925bad8b68d7b9f (patch) | |
| tree | e9f75944aa85ac6276bda61a6d23d2e1882ce021 | |
| parent | 6a9beab9f5faecf1d42d39aa9de2d8f7ca0b162d (diff) | |
| parent | d5c8c520e972535a18a23da8b71bc73f712ee53f (diff) | |
Merge "UidObserverController: Protect mValidateUids with mLock" into main am: e8617b5a60 am: d5c8c520e9
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/3420561
Change-Id: I22312e529141d0e3dcb68a60f9e42bfe9505d684
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | services/core/java/com/android/server/am/UidObserverController.java | 56 |
1 files changed, 31 insertions, 25 deletions
diff --git a/services/core/java/com/android/server/am/UidObserverController.java b/services/core/java/com/android/server/am/UidObserverController.java index f58e3f85bb26..23edafcc454b 100644 --- a/services/core/java/com/android/server/am/UidObserverController.java +++ b/services/core/java/com/android/server/am/UidObserverController.java @@ -78,6 +78,7 @@ public class UidObserverController { * This is for verifying the UID report flow. */ private static final boolean VALIDATE_UID_STATES = true; + @GuardedBy("mLock") private final ActiveUids mValidateUids; UidObserverController(@NonNull Handler handler) { @@ -285,31 +286,30 @@ public class UidObserverController { } mUidObservers.finishBroadcast(); - if (VALIDATE_UID_STATES && mUidObservers.getRegisteredCallbackCount() > 0) { - for (int j = 0; j < numUidChanges; ++j) { - final ChangeRecord item = mActiveUidChanges[j]; - if ((item.change & UidRecord.CHANGE_GONE) != 0) { - mValidateUids.remove(item.uid); - } else { - UidRecord validateUid = mValidateUids.get(item.uid); - if (validateUid == null) { - validateUid = new UidRecord(item.uid, null); - mValidateUids.put(item.uid, validateUid); - } - if ((item.change & UidRecord.CHANGE_IDLE) != 0) { - validateUid.setIdle(true); - } else if ((item.change & UidRecord.CHANGE_ACTIVE) != 0) { - validateUid.setIdle(false); + synchronized (mLock) { + if (VALIDATE_UID_STATES && mUidObservers.getRegisteredCallbackCount() > 0) { + for (int j = 0; j < numUidChanges; ++j) { + final ChangeRecord item = mActiveUidChanges[j]; + if ((item.change & UidRecord.CHANGE_GONE) != 0) { + mValidateUids.remove(item.uid); + } else { + UidRecord validateUid = mValidateUids.get(item.uid); + if (validateUid == null) { + validateUid = new UidRecord(item.uid, null); + mValidateUids.put(item.uid, validateUid); + } + if ((item.change & UidRecord.CHANGE_IDLE) != 0) { + validateUid.setIdle(true); + } else if ((item.change & UidRecord.CHANGE_ACTIVE) != 0) { + validateUid.setIdle(false); + } + validateUid.setSetProcState(item.procState); + validateUid.setCurProcState(item.procState); + validateUid.setSetCapability(item.capability); + validateUid.setCurCapability(item.capability); } - validateUid.setSetProcState(item.procState); - validateUid.setCurProcState(item.procState); - validateUid.setSetCapability(item.capability); - validateUid.setCurCapability(item.capability); } } - } - - synchronized (mLock) { for (int j = 0; j < numUidChanges; j++) { final ChangeRecord changeRecord = mActiveUidChanges[j]; changeRecord.isPending = false; @@ -436,7 +436,9 @@ public class UidObserverController { } UidRecord getValidateUidRecord(int uid) { - return mValidateUids.get(uid); + synchronized (mLock) { + return mValidateUids.get(uid); + } } void dump(@NonNull PrintWriter pw, @Nullable String dumpPackage) { @@ -491,12 +493,16 @@ public class UidObserverController { boolean dumpValidateUids(@NonNull PrintWriter pw, @Nullable String dumpPackage, int dumpAppId, @NonNull String header, boolean needSep) { - return mValidateUids.dump(pw, dumpPackage, dumpAppId, header, needSep); + synchronized (mLock) { + return mValidateUids.dump(pw, dumpPackage, dumpAppId, header, needSep); + } } void dumpValidateUidsProto(@NonNull ProtoOutputStream proto, @Nullable String dumpPackage, int dumpAppId, long fieldId) { - mValidateUids.dumpProto(proto, dumpPackage, dumpAppId, fieldId); + synchronized (mLock) { + mValidateUids.dumpProto(proto, dumpPackage, dumpAppId, fieldId); + } } static final class ChangeRecord { |