From 079495ac6326081b86d912bae084d3fdb916adb4 Mon Sep 17 00:00:00 2001 From: jiayongqiang Date: Wed, 11 Aug 2021 10:12:50 +0800 Subject: [PATCH] Fix thread safety issues; There are two threads can modify "mLastChanged" and "mScreenState" variables: 1. onFinishedWakingUp()/onFinishedGoingToSleep() are called from main thread in system_server; 2. setDeviceFolded() is called from android.display thread in system_server. Otherwise, NullPointerException might be throw when invoke method 'long java.lang.Long.longValue()'. Test: press power key to wake up the device and fold the device at the same time. Change-Id: I3a0f1862548f2e567baa8a4a615906dbf87a8243 Signed-off-by: jiayongqiang --- .../com/android/server/policy/DisplayFoldDurationLogger.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/policy/DisplayFoldDurationLogger.java b/services/core/java/com/android/server/policy/DisplayFoldDurationLogger.java index bdcd2cde2e4eb..3524d7f51090b 100644 --- a/services/core/java/com/android/server/policy/DisplayFoldDurationLogger.java +++ b/services/core/java/com/android/server/policy/DisplayFoldDurationLogger.java @@ -44,8 +44,8 @@ class DisplayFoldDurationLogger { @Retention(RetentionPolicy.SOURCE) public @interface ScreenState {} - private @ScreenState int mScreenState = SCREEN_STATE_UNKNOWN; - private Long mLastChanged = null; + private volatile @ScreenState int mScreenState = SCREEN_STATE_UNKNOWN; + private volatile Long mLastChanged = null; private static final int LOG_SUBTYPE_UNFOLDED = 0; private static final int LOG_SUBTYPE_FOLDED = 1;