From d0dcb84dfcb8a1ab88bf1abb2097179b54281fec Mon Sep 17 00:00:00 2001
From: Abhishek Gadewar <abhishekgadewar@meta.com>
Date: Fri, 10 May 2024 11:06:33 -0700
Subject: [PATCH] Synchronise dumpTempWhitelistSchedule in
 DeviceIdleController.java

Bug: 339934804
Test: atest --iterations 5 android.alarmmanager.cts.ExactAlarmsTest#alarmClockGrantsWhitelist
Change-Id: I1f032cb3e983ecf75e5607d9510a6f8ffee13607
Signed-off-by: Abhishek Gadewar <abhishekgadewar@meta.com>
---
 .../java/com/android/server/DeviceIdleController.java  | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java b/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java
index 6383ed873e59..a49ad9863c5f 100644
--- a/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java
+++ b/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java
@@ -618,6 +618,7 @@ public class DeviceIdleController extends SystemService
      * List of end times for app-IDs that are temporarily marked as being allowed to access
      * the network and acquire wakelocks. Times are in milliseconds.
      */
+    @GuardedBy("this")
     private final SparseArray<Pair<MutableLong, String>> mTempWhitelistAppIdEndTimes
             = new SparseArray<>();
 
@@ -4999,7 +5000,9 @@ public class DeviceIdleController extends SystemService
                 if (!DumpUtils.checkDumpPermission(getContext(), TAG, pw)) {
                     return -1;
                 }
-                dumpTempWhitelistSchedule(pw, false);
+                synchronized (this) {
+                    dumpTempWhitelistScheduleLocked(pw, false);
+                }
             }
         } else if ("except-idle-whitelist".equals(cmd)) {
             getContext().enforceCallingOrSelfPermission(
@@ -5283,7 +5286,7 @@ public class DeviceIdleController extends SystemService
                     pw.println();
                 }
             }
-            dumpTempWhitelistSchedule(pw, true);
+            dumpTempWhitelistScheduleLocked(pw, true);
 
             size = mTempWhitelistAppIdArray != null ? mTempWhitelistAppIdArray.length : 0;
             if (size > 0) {
@@ -5411,7 +5414,8 @@ public class DeviceIdleController extends SystemService
         }
     }
 
-    void dumpTempWhitelistSchedule(PrintWriter pw, boolean printTitle) {
+    @GuardedBy("this")
+    void dumpTempWhitelistScheduleLocked(PrintWriter pw, boolean printTitle) {
         final int size = mTempWhitelistAppIdEndTimes.size();
         if (size > 0) {
             String prefix = "";
-- 
GitLab