From 8c6a02a4e0cc20a6f1dc4314b15a7e7b1cea1ae7 Mon Sep 17 00:00:00 2001 From: Lais Andrade Date: Tue, 1 Mar 2022 17:02:05 +0000 Subject: [PATCH] Remove double-locking from PowerManagerService.onBootPhase The PowerManagerService.systemReady have some code that needs to be executed with the mLock held, and some that requirest it not to be held. One this is the BatterySaverPolicy.systemReady, that uses the same lock object as the PowerManagerService and explicitly required it not to be locked at that point. Moving the synchronized block inside the PHASE_BOOT_COMPLETED phase, since the incrementBootCount also don't require the lock as it acquires one as well. Fix: 222098360 Test: manual Change-Id: I1a25de3c7ba4be6d88d2654d42cdd496387391c2 --- .../android/server/power/PowerManagerService.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index bd58472f2d2c3..914e5eccd1924 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -1176,14 +1176,14 @@ public final class PowerManagerService extends SystemService @Override public void onBootPhase(int phase) { - synchronized (mLock) { - if (phase == PHASE_SYSTEM_SERVICES_READY) { - systemReady(); + if (phase == PHASE_SYSTEM_SERVICES_READY) { + systemReady(); - } else if (phase == PHASE_THIRD_PARTY_APPS_CAN_START) { - incrementBootCount(); + } else if (phase == PHASE_THIRD_PARTY_APPS_CAN_START) { + incrementBootCount(); - } else if (phase == PHASE_BOOT_COMPLETED) { + } else if (phase == PHASE_BOOT_COMPLETED) { + synchronized (mLock) { final long now = mClock.uptimeMillis(); mBootCompleted = true; mDirty |= DIRTY_BOOT_COMPLETED;