From 0baa1bc6655c28865190e53252fdbe1f1ae2b8ed Mon Sep 17 00:00:00 2001 From: Robert Carr Date: Thu, 30 Jun 2016 15:20:37 -0700 Subject: [PATCH] Fix synchronization error for Seamless rotation. Missing synchronized block in timeout codepath. Bug: 28823590 Change-Id: I38cff63b559b5f8cd65698af27a1100208ff2600 --- .../server/wm/WindowManagerService.java | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 59ddab08c4c88..0b80c5a8f79e8 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -8690,19 +8690,21 @@ public class WindowManagerService extends IWindowManager.Stub case SEAMLESS_ROTATION_TIMEOUT: { // Rotation only supported on primary display. // TODO(multi-display) - final DisplayContent displayContent = getDefaultDisplayContentLocked(); - final WindowList windows = displayContent.getWindowList(); - boolean layoutNeeded = false; - for (int i = windows.size() - 1; i >= 0; i--) { - WindowState w = windows.get(i); - if (w.mSeamlesslyRotated) { - layoutNeeded = true; - w.setDisplayLayoutNeeded(); + synchronized(mWindowMap) { + final DisplayContent displayContent = getDefaultDisplayContentLocked(); + final WindowList windows = displayContent.getWindowList(); + boolean layoutNeeded = false; + for (int i = windows.size() - 1; i >= 0; i--) { + WindowState w = windows.get(i); + if (w.mSeamlesslyRotated) { + layoutNeeded = true; + w.setDisplayLayoutNeeded(); + } + w.mSeamlesslyRotated = false; + } + if (layoutNeeded) { + mWindowPlacerLocked.performSurfacePlacement(); } - w.mSeamlesslyRotated = false; - } - if (layoutNeeded) { - mWindowPlacerLocked.performSurfacePlacement(); } } break;