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

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;
@@ -619,10 +618,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) {
@@ -2244,7 +2244,7 @@ public class DisplayModeDirector {
}
}
void dumpLocked(PrintWriter pw) {
void dump(PrintWriter pw) {
pw.println(" SensorObserver");
synchronized (mSensorObserverLock) {
pw.println(" mIsProxActive=" + mIsProxActive);