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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user