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