Make sure to cleanup views that couldn't be added

ie: due to BadTokenException or InvalidDisplayException

Previously, only views that were already in the viewhierarchy
before attempted to be re-added would be removed. This makes
sure if the view was newly added, it'll also be removed.
This prevents a memory leak of views.

Test: manually show and cancel multiple toasts,
check the hierachy viewer that no Toast views remain
Fixes: 234694098

Change-Id: I06bbae70c277d0615753edc9ec0a8e7439ad7020
This commit is contained in:
Beverly
2022-07-01 16:22:24 +00:00
parent f0e063d10e
commit 56ac2e2475

View File

@@ -404,9 +404,10 @@ public final class WindowManagerGlobal {
try {
root.setView(view, wparams, panelParentView, userId);
} catch (RuntimeException e) {
final int viewIndex = findViewLocked(view, false);
// BadTokenException or InvalidDisplayException, clean up.
if (index >= 0) {
removeViewLocked(index, true);
if (viewIndex >= 0) {
removeViewLocked(viewIndex, true);
}
throw e;
}