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

Commit ab30d8d8 authored by Evan Severson's avatar Evan Severson Committed by Android (Google) Code Review
Browse files

Merge "Copy pointer to sOnOpNotedCallback before queuing dispatch"

parents cac7fc1c 877ec882
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -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();
                    if (onOpNotedCallback != null) {
                        for (int i = 0; i < numMissedSyncOps; i++) {
                            final AsyncNotedAppOp syncNotedAppOp = sUnforwardedOps.get(i);
                        if (sOnOpNotedCallback != null) {
                            sOnOpNotedCallback.getAsyncNotedExecutor().execute(
                                    () -> sOnOpNotedCallback.onAsyncNoted(syncNotedAppOp));
                            onOpNotedCallback.getAsyncNotedExecutor().execute(
                                    () -> onOpNotedCallback.onAsyncNoted(syncNotedAppOp));
                        }
                    }
                    sUnforwardedOps.clear();