From fef145755fb153bd38f199dbda0e8a442e5d5158 Mon Sep 17 00:00:00 2001
From: Tetiana Meronyk <tetianameronyk@google.com>
Date: Mon, 8 Apr 2024 17:10:44 +0000
Subject: [PATCH] Move UserWakeupStore initialization to happen before it is
 used

Before this change there was a case in which UserWakeupStore was called before it was initialised which caused NPE.

With this change it is initialized before any calls can happen.

Bug: 332990374
Test: atest AlarmManagerServiceTest

Change-Id: I122eaf9a7f6dac17f808a7267e6f37292ffe91e4
---
 .../com/android/server/alarm/AlarmManagerService.java  | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java
index f9c8e0b551bd..b982d1253e21 100644
--- a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java
+++ b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java
@@ -1795,6 +1795,10 @@ public class AlarmManagerService extends SystemService {
 
         mUseFrozenStateToDropListenerAlarms = Flags.useFrozenStateToDropListenerAlarms();
         mStartUserBeforeScheduledAlarms = Flags.startUserBeforeScheduledAlarms();
+        if (mStartUserBeforeScheduledAlarms) {
+            mUserWakeupStore = new UserWakeupStore();
+            mUserWakeupStore.init();
+        }
         if (mUseFrozenStateToDropListenerAlarms) {
             final ActivityManager.UidFrozenStateChangedCallback callback = (uids, frozenStates) -> {
                 final int size = frozenStates.length;
@@ -1913,10 +1917,6 @@ public class AlarmManagerService extends SystemService {
                 Slog.w(TAG, "Failed to open alarm driver. Falling back to a handler.");
             }
         }
-        if (mStartUserBeforeScheduledAlarms) {
-            mUserWakeupStore = new UserWakeupStore();
-            mUserWakeupStore.init();
-        }
         publishLocalService(AlarmManagerInternal.class, new LocalService());
         publishBinderService(Context.ALARM_SERVICE, mService);
     }
@@ -3863,7 +3863,7 @@ public class AlarmManagerService extends SystemService {
         long nextNonWakeup = 0;
         if (mAlarmStore.size() > 0) {
             long firstWakeup = mAlarmStore.getNextWakeupDeliveryTime();
-            if (mStartUserBeforeScheduledAlarms) {
+            if (mStartUserBeforeScheduledAlarms && mUserWakeupStore != null) {
                 final long firstUserWakeup = mUserWakeupStore.getNextWakeupTime();
                 if (firstUserWakeup >= 0 && firstUserWakeup < firstWakeup) {
                     firstWakeup = firstUserWakeup;
-- 
GitLab