Merge "Synchronize on the SparseArray object in PendingTempAllowlists."

This commit is contained in:
TreeHugger Robot
2022-01-05 23:38:01 +00:00
committed by Android (Google) Code Review
2 changed files with 30 additions and 13 deletions

View File

@@ -5823,7 +5823,7 @@ public class ActivityManagerService extends IActivityManager.Stub
return Arrays.binarySearch(allowlist, appId) >= 0
|| Arrays.binarySearch(mDeviceIdleTempAllowlist, appId) >= 0
|| mPendingTempAllowlist.indexOfKey(uid) >= 0;
|| mPendingTempAllowlist.get(uid) != null;
}
/**
@@ -15122,11 +15122,13 @@ public class ActivityManagerService extends IActivityManager.Stub
// First copy out the pending changes... we need to leave them in the map for now,
// in case someone needs to check what is coming up while we don't have the lock held.
synchronized (mProcLock) {
N = mPendingTempAllowlist.size();
list = new PendingTempAllowlist[N];
for (int i = 0; i < N; i++) {
list[i] = mPendingTempAllowlist.valueAt(i);
synchronized (this) {
synchronized (mProcLock) {
N = mPendingTempAllowlist.size();
list = new PendingTempAllowlist[N];
for (int i = 0; i < N; i++) {
list[i] = mPendingTempAllowlist.valueAt(i);
}
}
}

View File

@@ -16,6 +16,8 @@
package com.android.server.am;
import static android.os.Process.INVALID_UID;
import android.util.SparseArray;
/** Allowlists of uids to temporarily bypass Power Save mode. */
@@ -31,29 +33,42 @@ final class PendingTempAllowlists {
}
void put(int uid, ActivityManagerService.PendingTempAllowlist value) {
mPendingTempAllowlist.put(uid, value);
synchronized (mPendingTempAllowlist) {
mPendingTempAllowlist.put(uid, value);
}
mService.mAtmInternal.onUidAddedToPendingTempAllowlist(uid, value.tag);
}
void removeAt(int index) {
final int uid = mPendingTempAllowlist.keyAt(index);
mPendingTempAllowlist.removeAt(index);
int uid = INVALID_UID;
synchronized (mPendingTempAllowlist) {
uid = mPendingTempAllowlist.keyAt(index);
mPendingTempAllowlist.removeAt(index);
}
mService.mAtmInternal.onUidRemovedFromPendingTempAllowlist(uid);
}
ActivityManagerService.PendingTempAllowlist get(int uid) {
return mPendingTempAllowlist.get(uid);
synchronized (mPendingTempAllowlist) {
return mPendingTempAllowlist.get(uid);
}
}
int size() {
return mPendingTempAllowlist.size();
synchronized (mPendingTempAllowlist) {
return mPendingTempAllowlist.size();
}
}
ActivityManagerService.PendingTempAllowlist valueAt(int index) {
return mPendingTempAllowlist.valueAt(index);
synchronized (mPendingTempAllowlist) {
return mPendingTempAllowlist.valueAt(index);
}
}
int indexOfKey(int key) {
return mPendingTempAllowlist.indexOfKey(key);
synchronized (mPendingTempAllowlist) {
return mPendingTempAllowlist.indexOfKey(key);
}
}
}