summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Evan Severson <evanseverson@google.com> 2021-11-23 23:44:16 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-11-23 23:44:16 +0000
commitab30d8d89a4ce25cfb516fa6f2bcb64fbacbf573 (patch)
tree29ee8664641b3c2b38077723139747e51188787d
parentcac7fc1c2ea1796926b427f41055b180c85ffd6c (diff)
parent877ec8829845e931a878f60652a1ee672f0a5ccf (diff)
Merge "Copy pointer to sOnOpNotedCallback before queuing dispatch"
-rw-r--r--core/java/android/app/AppOpsManager.java20
1 files changed, 10 insertions, 10 deletions
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 7a545f695aff..565f69090c6b 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -9469,23 +9469,23 @@ public class AppOpsManager {
e.rethrowFromSystemServer();
}
- if (missedAsyncOps != null) {
+ // Copy pointer so callback can be dispatched out of lock
+ OnOpNotedCallback onOpNotedCallback = sOnOpNotedCallback;
+ if (onOpNotedCallback != null && missedAsyncOps != null) {
int numMissedAsyncOps = missedAsyncOps.size();
for (int i = 0; i < numMissedAsyncOps; i++) {
final AsyncNotedAppOp asyncNotedAppOp = missedAsyncOps.get(i);
- if (sOnOpNotedCallback != null) {
- sOnOpNotedCallback.getAsyncNotedExecutor().execute(
- () -> sOnOpNotedCallback.onAsyncNoted(asyncNotedAppOp));
- }
+ onOpNotedCallback.getAsyncNotedExecutor().execute(
+ () -> onOpNotedCallback.onAsyncNoted(asyncNotedAppOp));
}
}
synchronized (this) {
int numMissedSyncOps = sUnforwardedOps.size();
- for (int i = 0; i < numMissedSyncOps; i++) {
- final AsyncNotedAppOp syncNotedAppOp = sUnforwardedOps.get(i);
- if (sOnOpNotedCallback != null) {
- sOnOpNotedCallback.getAsyncNotedExecutor().execute(
- () -> sOnOpNotedCallback.onAsyncNoted(syncNotedAppOp));
+ if (onOpNotedCallback != null) {
+ for (int i = 0; i < numMissedSyncOps; i++) {
+ final AsyncNotedAppOp syncNotedAppOp = sUnforwardedOps.get(i);
+ onOpNotedCallback.getAsyncNotedExecutor().execute(
+ () -> onOpNotedCallback.onAsyncNoted(syncNotedAppOp));
}
}
sUnforwardedOps.clear();