From ab7c9c006528efd0a2651b612bdcc0467064e592 Mon Sep 17 00:00:00 2001 From: Santos Cordon Date: Wed, 15 Dec 2021 13:46:57 +0000 Subject: [PATCH] Fix potential deadlock with SensorObserver. Sensor Observer grabs it's own lock (mSOLock) when voting for a display mode, which then grabs the global DMD lock (mLock). When printing out the dump() method, DMD holds mLock, then calls into SensorObserver which grabs the mSOLock. This can cause a deadlock. There's no reason to hold mLock when calling SensorObserver's dump() method, so fix that. Test: adb shell dumpsys display Bug: 210086128 Change-Id: Idf685f94b818f04f30bee5b85a503f64d448291a (cherry picked from commit 8f808c5d7954215d846a4fca227e53dd33dd3428) --- .../com/android/server/display/DisplayModeDirector.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/display/DisplayModeDirector.java b/services/core/java/com/android/server/display/DisplayModeDirector.java index 0a22f2fdfdf8e..a4f7c85dee29b 100644 --- a/services/core/java/com/android/server/display/DisplayModeDirector.java +++ b/services/core/java/com/android/server/display/DisplayModeDirector.java @@ -41,7 +41,6 @@ import android.os.IThermalEventListener; import android.os.IThermalService; import android.os.Looper; import android.os.Message; -import android.os.PowerManager; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; @@ -618,10 +617,11 @@ public class DisplayModeDirector { mAppRequestObserver.dumpLocked(pw); mBrightnessObserver.dumpLocked(pw); mUdfpsObserver.dumpLocked(pw); - mSensorObserver.dumpLocked(pw); mHbmObserver.dumpLocked(pw); mSkinThermalStatusObserver.dumpLocked(pw); } + + mSensorObserver.dump(pw); } private void updateVoteLocked(int priority, Vote vote) { @@ -2241,7 +2241,7 @@ public class DisplayModeDirector { } } - void dumpLocked(PrintWriter pw) { + void dump(PrintWriter pw) { pw.println(" SensorObserver"); synchronized (mSensorObserverLock) { pw.println(" mIsProxActive=" + mIsProxActive);