Do not remove toast window token without removing window
This causes the 2nd call to removeWindowToken from finishWindowTokenLocked to fail because the window token has been removed from WMS. This causes window leaks in some edge cases, ie. b/286495456. Test: atest WindowUntrustedTouchTest atest ToastWindowTest atest ToastPresenterTest atest ToastUITest Bug: 204272000 Bug: 286495456 Bug: 282262771 Change-Id: I43e640c230fed0fac85631fe584e77d901af0949
This commit is contained in:
committed by
Iavor-Valentin Iftime
parent
7e387fc706
commit
f8c953de9c
@@ -8718,13 +8718,7 @@ public class NotificationManagerService extends SystemService {
|
||||
|
||||
ToastRecord lastToast = mToastQueue.remove(index);
|
||||
|
||||
mWindowManagerInternal.removeWindowToken(lastToast.windowToken, false /* removeWindows */,
|
||||
lastToast.displayId);
|
||||
// We passed 'false' for 'removeWindows' so that the client has time to stop
|
||||
// rendering (as hide above is a one-way message), otherwise we could crash
|
||||
// a client which was actively using a surface made from the token. However
|
||||
// we need to schedule a timeout to make sure the token is eventually killed
|
||||
// one way or another.
|
||||
// We need to schedule a timeout to make sure the token is eventually killed
|
||||
scheduleKillTokenTimeout(lastToast);
|
||||
|
||||
keepProcessAliveForToastIfNeededLocked(record.pid);
|
||||
|
||||
Reference in New Issue
Block a user