From b33f0178ed64d6dc3fc68d72481ed74c1a709f3e Mon Sep 17 00:00:00 2001 From: Hyeongseop Shim Date: Mon, 17 Jul 2023 19:01:30 +0900 Subject: [PATCH] Fix bug on DC#ensureActivitiesVisible There is a possibility that a certain DC does not perform ensureActivitiesVisible since exception occurs on the binder thread. If an exception occurs during its execution, the execution of the finally statement is not conducted. From this point on, the DC doesn't execute ensureActivitiesVisible forever. Bug: 291175616 Change-Id: I042c15d3836f62a6c31e22d05023f4e61fb046d2 Signed-off-by: Hyeongseop Shim --- services/core/java/com/android/server/wm/DisplayContent.java | 2 +- .../core/java/com/android/server/wm/RootWindowContainer.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index f5a41c90f26d2..b12d8bd97faf9 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -6302,9 +6302,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp // Don't do recursive work. return; } - mInEnsureActivitiesVisible = true; mAtmService.mTaskSupervisor.beginActivityVisibilityUpdate(); try { + mInEnsureActivitiesVisible = true; forAllRootTasks(rootTask -> { rootTask.ensureActivitiesVisible(starting, configChanges, preserveWindows, notifyClients); diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index 10673a3679ee6..23ea6d7c01167 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -1833,9 +1833,8 @@ class RootWindowContainer extends WindowContainer // Don't do recursive work. return; } - + mTaskSupervisor.beginActivityVisibilityUpdate(); try { - mTaskSupervisor.beginActivityVisibilityUpdate(); // First the front root tasks. In case any are not fullscreen and are in front of home. for (int displayNdx = getChildCount() - 1; displayNdx >= 0; --displayNdx) { final DisplayContent display = getChildAt(displayNdx);