am 117f0c15: am 25418aab: Merge "Ensure arraylist index is montonically decreasing" into lmp-mr1-dev automerge: 9bb16f5
* commit '117f0c15f7d534afeed20d8e14be8a83f8062f72':
Ensure arraylist index is montonically decreasing
diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java
index 1086eb2..f859fd2 100644
--- a/services/core/java/com/android/server/wm/AppWindowToken.java
+++ b/services/core/java/com/android/server/wm/AppWindowToken.java
@@ -254,15 +254,18 @@
@Override
void removeAllWindows() {
- int winNdx;
- while ((winNdx = allAppWindows.size()) > 0) {
- WindowState win = allAppWindows.get(winNdx - 1);
+ for (int winNdx = allAppWindows.size() - 1; winNdx >= 0;
+ // removeWindowLocked at bottom of loop may remove multiple entries from
+ // allAppWindows if the window to be removed has child windows. It also may
+ // not remove any windows from allAppWindows at all if win is exiting and
+ // currently animating away. This ensures that winNdx is monotonically decreasing
+ // and never beyond allAppWindows bounds.
+ winNdx = Math.min(winNdx - 1, allAppWindows.size() - 1)) {
+ WindowState win = allAppWindows.get(winNdx);
if (WindowManagerService.DEBUG_WINDOW_MOVEMENT) {
Slog.w(WindowManagerService.TAG, "removeAllWindows: removing win=" + win);
}
- // {@link WindowManagerService.removeWindowLocked} may remove multiple entries from
- // {@link #allAppWindows} if the window to be removed has child windows.
win.mService.removeWindowLocked(win.mSession, win);
}
}