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 8f808c5d79)
This commit is contained in:
Santos Cordon
2021-12-15 13:46:57 +00:00
parent 7fa6c03fdb
commit ab7c9c0065

View File

@@ -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);