DO NOT MERGE: Fix issue #129936402: Runtime restart occurs when suspending an app...
NPE at com.android.server.appop.AppOpsService.notifyOpChanged(AppOpsService.java:1431)
Wasn't checking for a null callback list, and also fixed threading
issues.
Fixes: 129936402
Test: Manual
Change-Id: I9c39429421643ebc10e78679c2bec52827603da1
Merged-In: I9c39429421643ebc10e78679c2bec52827603da1
diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java
index c9e7cfa..d073bc6 100644
--- a/services/core/java/com/android/server/appop/AppOpsService.java
+++ b/services/core/java/com/android/server/appop/AppOpsService.java
@@ -782,13 +782,20 @@
final int[] changedUids = intent.getIntArrayExtra(Intent.EXTRA_CHANGED_UID_LIST);
final String[] changedPkgs = intent.getStringArrayExtra(
Intent.EXTRA_CHANGED_PACKAGE_LIST);
- final ArraySet<ModeCallback> callbacks = mOpModeWatchers.get(OP_PLAY_AUDIO);
+ ArraySet<ModeCallback> callbacks;
+ synchronized (AppOpsService.this) {
+ callbacks = mOpModeWatchers.get(OP_PLAY_AUDIO);
+ if (callbacks == null) {
+ return;
+ }
+ callbacks = new ArraySet<>(callbacks);
+ }
for (int i = 0; i < changedUids.length; i++) {
final int changedUid = changedUids[i];
final String changedPkg = changedPkgs[i];
- // We trust packagemanager to insert matching uid and packageNames in the extras
- mHandler.sendMessage(PooledLambda.obtainMessage(AppOpsService::notifyOpChanged,
- AppOpsService.this, callbacks, OP_PLAY_AUDIO, changedUid, changedPkg));
+ // We trust packagemanager to insert matching uid and packageNames in the
+ // extras
+ notifyOpChanged(callbacks, OP_PLAY_AUDIO, changedUid, changedPkg);
}
}
}, packageSuspendFilter);