Fix deadlock when updating rotation

Post a runnable in MyOrientationListener.onProposedRotationChanged for
the updateRotation() so that it doesn't acquire WM lock while holding
WindowOrientationListener lock. It could cause deadlock if WM is
is performing a relayout and try to access WindowOrientationListener.

bug: 23507268
Change-Id: I5775f5a13cae0283fef64877801bf8a39dfc90a4
This commit is contained in:
Chong Zhang
2015-08-28 10:22:36 -07:00
parent 26b555d42c
commit 5aaa0b3880

View File

@@ -762,6 +762,13 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
class MyOrientationListener extends WindowOrientationListener {
private final Runnable mUpdateRotationRunnable = new Runnable() {
@Override
public void run() {
updateRotation(false);
}
};
MyOrientationListener(Context context, Handler handler) {
super(context, handler);
}
@@ -769,7 +776,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
@Override
public void onProposedRotationChanged(int rotation) {
if (localLOGV) Slog.v(TAG, "onProposedRotationChanged, rotation=" + rotation);
updateRotation(false);
mHandler.post(mUpdateRotationRunnable);
}
}
MyOrientationListener mOrientationListener;