summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/appop/AppOpsService.java10
1 files changed, 7 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java
index 12eb8f214121..1b12dc79d98f 100644
--- a/services/core/java/com/android/server/appop/AppOpsService.java
+++ b/services/core/java/com/android/server/appop/AppOpsService.java
@@ -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);
}