From cb882f90e4305bd40d7219707bc1796319e9c80e Mon Sep 17 00:00:00 2001 From: Jeff Brown Date: Tue, 2 Oct 2012 16:35:35 -0700 Subject: [PATCH] Fix bug removing all windows that belong to a display. Removing one window causes its subwindows to also be removed. We have to be careful when traversing the window list because multiple windows may be removed at a time so we don't get IndexOutOfBoundsException due to the window list changing in unexpected ways. Bug: 7273702 Change-Id: I0ed9ba00c325ad178ab28919ce2e763cb6fd38ba --- services/java/com/android/server/wm/WindowManagerService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index ae805c38c7e55..8fb1459cd7c97 100755 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -10870,8 +10870,8 @@ public class WindowManagerService extends IWindowManager.Stub final DisplayContent displayContent = getDisplayContentLocked(displayId); mDisplayContents.delete(displayId); WindowList windows = displayContent.getWindowList(); - for (int i = windows.size() - 1; i >= 0; --i) { - final WindowState win = windows.get(i); + while (!windows.isEmpty()) { + final WindowState win = windows.get(windows.size() - 1); removeWindowLocked(win.mSession, win); } mAnimator.removeDisplayLocked(displayId);