From 1c459ef9e77aca63d33fadd60efebc89dce1e291 Mon Sep 17 00:00:00 2001 From: Jeff Chang Date: Tue, 18 Jun 2019 11:51:25 +0800 Subject: [PATCH] Fix a potential crash when calculate system gesture exclusion When calculate the exclude region during the swipe gesture. There is a chance to meet index out of bounds exception when traverse all windows to assemble the gesture exclusion rects. We add a WM lock to protect the window state correctly. Bug: 135298121 Test: atest DisplayPolicyTests atest DisplayContentTests Change-Id: Ib71134d97e43ac91ce6713dd3dbf30280c44c574 (cherry picked from commit 3cf3e56ad98995fc62797bfaa6cc462f901865c7) --- .../java/com/android/server/wm/DisplayPolicy.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java index 7badc7a437743..5c006941f1e60 100644 --- a/services/core/java/com/android/server/wm/DisplayPolicy.java +++ b/services/core/java/com/android/server/wm/DisplayPolicy.java @@ -478,8 +478,10 @@ public class DisplayPolicy { @Override public void onSwipeFromRight() { - final Region excludedRegion = - mDisplayContent.calculateSystemGestureExclusion(); + final Region excludedRegion; + synchronized (mLock) { + excludedRegion = mDisplayContent.calculateSystemGestureExclusion(); + } final boolean sideAllowed = mNavigationBarAlwaysShowOnSideGesture || mNavigationBarPosition == NAV_BAR_RIGHT; if (mNavigationBar != null && sideAllowed @@ -490,8 +492,10 @@ public class DisplayPolicy { @Override public void onSwipeFromLeft() { - final Region excludedRegion = - mDisplayContent.calculateSystemGestureExclusion(); + final Region excludedRegion; + synchronized (mLock) { + excludedRegion = mDisplayContent.calculateSystemGestureExclusion(); + } final boolean sideAllowed = mNavigationBarAlwaysShowOnSideGesture || mNavigationBarPosition == NAV_BAR_LEFT; if (mNavigationBar != null && sideAllowed