From 5504a25a6f3cfcd7d13dbee86beb3cddc80ef770 Mon Sep 17 00:00:00 2001 From: Juneup Park Date: Fri, 23 Oct 2020 19:23:57 +0900 Subject: [PATCH] RESTRICT AUTOMERGE Prevent size of list changes during mPendingNonWakeupAlarms deliver When device changes from SCREEN_OFF to SCREEN_ON, AlarmManagerService deliver non-wakeup alarms. If there is TIME_TICK alarm in mPendingNonWakeupAlarms, TIME_TICK alarm is rescheduled. While TIME_TICK alarm is set again, it is removed from mPendingNonWakeupAlarms. Because removing alarm from mPendingNonWakeupAlarms change size of mPendingNonWakeupAlarms, last alarm in mPendingNonWakeupAlarms is not delivered. Test: build / boot Change-Id: If0ab601248b4833855e03157cc47ffc678b3b974 Merged-In: I5228c323bb9698864c467e9e4c400459ca404b3c --- .../core/java/com/android/server/AlarmManagerService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java index 651f941be0b18..d09f44fdeb4d4 100644 --- a/services/core/java/com/android/server/AlarmManagerService.java +++ b/services/core/java/com/android/server/AlarmManagerService.java @@ -3369,7 +3369,9 @@ class AlarmManagerService extends SystemService { if (mMaxDelayTime < thisDelayTime) { mMaxDelayTime = thisDelayTime; } - deliverAlarmsLocked(mPendingNonWakeupAlarms, nowELAPSED); + ArrayList triggerList = + (ArrayList) mPendingNonWakeupAlarms.clone(); + deliverAlarmsLocked(triggerList, nowELAPSED); mPendingNonWakeupAlarms.clear(); } if (mNonInteractiveStartTime > 0) {