Merge "Fix ConcurrentModification in onUidStateChanged" into rvc-qpr-dev am: 46f8c13e5b

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13144000

Change-Id: Iebf8e0aa1ddcbc8cb76cff97a6b2700cec2b76c7
This commit is contained in:
TreeHugger Robot
2020-12-03 18:11:22 +00:00
committed by Automerger Merge Worker

View File

@@ -1011,10 +1011,11 @@ public class AppOpsService extends IAppOpsService.Stub {
}
int numInProgressEvents = mInProgressEvents.size();
List<IBinder> binders = new ArrayList<>(mInProgressEvents.keySet());
for (int i = 0; i < numInProgressEvents; i++) {
InProgressStartOpEvent event = mInProgressEvents.valueAt(i);
InProgressStartOpEvent event = mInProgressEvents.get(binders.get(i));
if (event.getUidState() != newState) {
if (event != null && event.getUidState() != newState) {
try {
// Remove all but one unfinished start count and then call finished() to
// remove start event object
@@ -1025,7 +1026,10 @@ public class AppOpsService extends IAppOpsService.Stub {
// Call started() to add a new start event object and then add the
// previously removed unfinished start counts back
started(event.getClientId(), newState, false);
event.numUnfinishedStarts += numPreviousUnfinishedStarts - 1;
InProgressStartOpEvent newEvent = mInProgressEvents.get(binders.get(i));
if (newEvent != null) {
newEvent.numUnfinishedStarts += numPreviousUnfinishedStarts - 1;
}
} catch (RemoteException e) {
if (DEBUG) Slog.e(TAG, "Cannot switch to new uidState " + newState);
}