From 21e913fae8382c1220f1dba0570f56242e4c1be6 Mon Sep 17 00:00:00 2001 From: Jiaming Liu Date: Tue, 20 Jun 2023 19:36:45 +0000 Subject: Guard mRearDisplayPendingOverrideRequest with mLock mRearDisplayPendingOverrideRequest was null checked before acquiring the lock, which potentially caused the NullPointerException because the value might have changed while waiting on the lock. Bug: 287264582 Change-Id: Ia14ca58a7d608ae95e1804dbcc5ab141f6f3b27c Test: Manual --- .../com/android/server/devicestate/DeviceStateManagerService.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/devicestate/DeviceStateManagerService.java b/services/core/java/com/android/server/devicestate/DeviceStateManagerService.java index eb7fa1069b7b..add94b1bf937 100644 --- a/services/core/java/com/android/server/devicestate/DeviceStateManagerService.java +++ b/services/core/java/com/android/server/devicestate/DeviceStateManagerService.java @@ -172,6 +172,7 @@ public final class DeviceStateManagerService extends SystemService { private DeviceState mRearDisplayState; // TODO(259328837) Generalize for all pending feature requests in the future + @GuardedBy("mLock") @Nullable private OverrideRequest mRearDisplayPendingOverrideRequest; @@ -779,7 +780,7 @@ public final class DeviceStateManagerService extends SystemService { * {@link StatusBarManagerInternal} to notify SystemUI to display the educational dialog. */ @GuardedBy("mLock") - private void showRearDisplayEducationalOverlayLocked(OverrideRequest request) { + private void showRearDisplayEducationalOverlayLocked(@NonNull OverrideRequest request) { mRearDisplayPendingOverrideRequest = request; StatusBarManagerInternal statusBar = @@ -844,8 +845,8 @@ public final class DeviceStateManagerService extends SystemService { * request if it was dismissed in a way that should cancel the feature. */ private void onStateRequestOverlayDismissedInternal(boolean shouldCancelRequest) { - if (mRearDisplayPendingOverrideRequest != null) { - synchronized (mLock) { + synchronized (mLock) { + if (mRearDisplayPendingOverrideRequest != null) { if (shouldCancelRequest) { ProcessRecord processRecord = mProcessRecords.get( mRearDisplayPendingOverrideRequest.getPid()); -- cgit v1.2.3-59-g8ed1b