From bcfd5347a13a794757a9ddda28f9579d3cccf633 Mon Sep 17 00:00:00 2001 From: wilsonshih Date: Tue, 23 Oct 2018 17:21:02 +0800 Subject: [PATCH] Fix KeyguardController::mDisplayStates leak ActivityDisplay#remove doesn't ensure this display be remove directly, should move KeyguardController::onDisplayRemoved into releaseSelfIfNeeded. Bug: 118238630 Test: atest ActivityManagerMultiDisplayTests#testNoLeakOnExternalDisplay. Change-Id: Ia9619c59da8be736f71af1b8fddc14b4798c966e --- services/core/java/com/android/server/wm/ActivityDisplay.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityDisplay.java b/services/core/java/com/android/server/wm/ActivityDisplay.java index f8c4ca219280c..5fb1deff9650b 100644 --- a/services/core/java/com/android/server/wm/ActivityDisplay.java +++ b/services/core/java/com/android/server/wm/ActivityDisplay.java @@ -1035,8 +1035,6 @@ class ActivityDisplay extends ConfigurationContainer releaseSelfIfNeeded(); - mSupervisor.getKeyguardController().onDisplayRemoved(mDisplayId); - if (!mAllSleepTokens.isEmpty()) { mSupervisor.mSleepTokens.removeAll(mAllSleepTokens); mAllSleepTokens.clear(); @@ -1049,6 +1047,7 @@ class ActivityDisplay extends ConfigurationContainer mWindowContainerController.removeContainer(); mWindowContainerController = null; mSupervisor.removeChild(this); + mSupervisor.getKeyguardController().onDisplayRemoved(mDisplayId); } }