diff options
author | Jeff Brown <jeffbrown@google.com> | 2012-10-02 16:35:35 -0700 |
---|---|---|
committer | Jeff Brown <jeffbrown@google.com> | 2012-10-02 16:35:35 -0700 |
commit | cb882f90e4305bd40d7219707bc1796319e9c80e (patch) | |
tree | 137f4d7bdb69d4c3eab56b94e8ab10dc00895629 /services | |
parent | c2726643e74873c544efc2769a5ab2a445c433c4 (diff) | |
download | frameworks_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-x | services/java/com/android/server/wm/WindowManagerService.java | 4 |
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); |