diff --git a/services/core/java/com/android/server/am/BroadcastProcessQueue.java b/services/core/java/com/android/server/am/BroadcastProcessQueue.java index 47ca427be9ff4..22caef2a4682e 100644 --- a/services/core/java/com/android/server/am/BroadcastProcessQueue.java +++ b/services/core/java/com/android/server/am/BroadcastProcessQueue.java @@ -582,20 +582,21 @@ class BroadcastProcessQueue { * barrier timestamp that are still waiting to be delivered. */ public boolean isBeyondBarrierLocked(@UptimeMillisLong long barrierTime) { - if (mActive != null) { - return mActive.enqueueTime > barrierTime; - } final SomeArgs next = mPending.peekFirst(); final SomeArgs nextUrgent = mPendingUrgent.peekFirst(); final SomeArgs nextOffload = mPendingOffload.peekFirst(); - // Empty queue is past any barrier - final boolean nextLater = (next == null) + + // Empty records are always past any barrier + final boolean activeBeyond = (mActive == null) + || mActive.enqueueTime > barrierTime; + final boolean nextBeyond = (next == null) || ((BroadcastRecord) next.arg1).enqueueTime > barrierTime; - final boolean nextUrgentLater = (nextUrgent == null) + final boolean nextUrgentBeyond = (nextUrgent == null) || ((BroadcastRecord) nextUrgent.arg1).enqueueTime > barrierTime; - final boolean nextOffloadLater = (nextOffload == null) + final boolean nextOffloadBeyond = (nextOffload == null) || ((BroadcastRecord) nextOffload.arg1).enqueueTime > barrierTime; - return nextLater && nextUrgentLater && nextOffloadLater; + + return activeBeyond && nextBeyond && nextUrgentBeyond && nextOffloadBeyond; } public boolean isRunnable() {