From c83d3e4b72f8f25bbac39a577f125f0ca04354da Mon Sep 17 00:00:00 2001 From: Christopher Tate Date: Wed, 4 Feb 2015 13:48:29 -0800 Subject: [PATCH] Always re-establish kernel alarms when considering new alarm set As a backstop against missed alarm delivery / wakeups or clock slew, make sure to always schedule a kernel alarm for the next alarm events of interest when we've reexamined the set of deliverable alarms. Bug 19201933 Change-Id: I3cd37a63dfb0c8258941497d4ba516ed00e2edad --- .../core/java/com/android/server/AlarmManagerService.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java index a9a756ed928c8..65a5c23824bdf 100644 --- a/services/core/java/com/android/server/AlarmManagerService.java +++ b/services/core/java/com/android/server/AlarmManagerService.java @@ -1230,7 +1230,8 @@ class AlarmManagerService extends SystemService { if (mAlarmBatches.size() > 0) { final Batch firstWakeup = findFirstWakeupBatchLocked(); final Batch firstBatch = mAlarmBatches.get(0); - if (firstWakeup != null && mNextWakeup != firstWakeup.start) { + // always update the kernel alarms, as a backstop against missed wakeups + if (firstWakeup != null) { mNextWakeup = firstWakeup.start; setLocked(ELAPSED_REALTIME_WAKEUP, firstWakeup.start); } @@ -1243,7 +1244,8 @@ class AlarmManagerService extends SystemService { nextNonWakeup = mNextNonWakeupDeliveryTime; } } - if (nextNonWakeup != 0 && mNextNonWakeup != nextNonWakeup) { + // always update the kernel alarm, as a backstop against missed wakeups + if (nextNonWakeup != 0) { mNextNonWakeup = nextNonWakeup; setLocked(ELAPSED_REALTIME, nextNonWakeup); }