diff options
| author | 2021-11-23 23:44:16 +0000 | |
|---|---|---|
| committer | 2021-11-23 23:44:16 +0000 | |
| commit | ab30d8d89a4ce25cfb516fa6f2bcb64fbacbf573 (patch) | |
| tree | 29ee8664641b3c2b38077723139747e51188787d | |
| parent | cac7fc1c2ea1796926b427f41055b180c85ffd6c (diff) | |
| parent | 877ec8829845e931a878f60652a1ee672f0a5ccf (diff) | |
Merge "Copy pointer to sOnOpNotedCallback before queuing dispatch"
| -rw-r--r-- | core/java/android/app/AppOpsManager.java | 20 |
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(); |