Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aad5f733 authored by Nate Myren's avatar Nate Myren
Browse files

Fix ConcurrentModification in onUidStateChanged

Bug: 172776374
Fixes: 173078211
Test: Presubmit
Change-Id: Ib4c96e81cbe2adcfd53ea23ae644e978effb7a92
parent b7c12297
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -1057,19 +1057,20 @@ 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
                        int numPreviousUnfinishedStarts = event.numUnfinishedStarts;
                        event.numUnfinishedStarts = 1;
                        finished(event.getClientId(), false);

                        OpEventProxyInfo proxy = event.getProxy();

                        finished(event.getClientId(), false);

                        // Call started() to add a new start event object and then add the
                        // previously removed unfinished start counts back
                        if (proxy != null) {
@@ -1079,7 +1080,11 @@ public class AppOpsService extends IAppOpsService.Stub {
                            started(event.getClientId(), Process.INVALID_UID, null, null, newState,
                                    OP_FLAG_SELF, 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);
                    }