summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorJeff Brown <jeffbrown@google.com>2012-10-02 16:35:35 -0700
committerJeff Brown <jeffbrown@google.com>2012-10-02 16:35:35 -0700
commitcb882f90e4305bd40d7219707bc1796319e9c80e (patch)
tree137f4d7bdb69d4c3eab56b94e8ab10dc00895629 /services
parentc2726643e74873c544efc2769a5ab2a445c433c4 (diff)
downloadframeworks_base-cb882f90e4305bd40d7219707bc1796319e9c80e.zip
frameworks_base-cb882f90e4305bd40d7219707bc1796319e9c80e.tar.gz
frameworks_base-cb882f90e4305bd40d7219707bc1796319e9c80e.tar.bz2
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
Diffstat (limited to 'services')
-rwxr-xr-xservices/java/com/android/server/wm/WindowManagerService.java4
1 files 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 ae805c3..8fb1459 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);