diff options
| author | 2023-11-01 08:52:46 +0000 | |
|---|---|---|
| committer | 2023-11-01 08:52:46 +0000 | |
| commit | ab06ca17011fd5d97f2256ca68709a26d3b43ee9 (patch) | |
| tree | 802caf7edc662e2c085ce18bc05be008fb83d79b | |
| parent | 06693f0ad77fe7db1dc58d4450741ca7cb013f36 (diff) | |
Clear member reference AR#mStartingWindow once starting window death.
Clear the local reference of starting window once the window is death,
so it won't be reuse anywhere else.
Bug: 308334422
Test: launch test app to show splash screen then kill systemui
immediately, verify the starting window reference can be removed right
after receive binderDied.
Change-Id: Ic1b35d9a05d761e9716e3d5f603847df1d7b4d26
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityRecord.java | 10 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 2 |
2 files changed, 8 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index bdab4d483872..b70fa8ff7596 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -2887,7 +2887,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } final StartingSurfaceController.StartingSurface surface; - final WindowState startingWindow = mStartingWindow; final boolean animate; if (mStartingData != null) { if (mStartingData.mWaitForSyncTransactionCommit @@ -4545,7 +4544,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A mTransitionChangeFlags |= FLAG_STARTING_WINDOW_TRANSFER_RECIPIENT; } // Post cleanup after the visibility and animation are transferred. - fromActivity.postWindowRemoveStartingWindowCleanup(); + fromActivity.postWindowRemoveStartingWindowCleanup(tStartingWindow); fromActivity.mVisibleSetFromTransferredStartingWindow = false; mWmService.updateFocusedWindowLocked( @@ -7461,7 +7460,12 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } } - void postWindowRemoveStartingWindowCleanup() { + void postWindowRemoveStartingWindowCleanup(@NonNull WindowState win) { + if (mStartingWindow == win) { + // This could only happen when the window is removed from hierarchy. So do not keep its + // reference anymore. + mStartingWindow = null; + } if (mChildren.size() == 0 && mVisibleSetFromTransferredStartingWindow) { // We set the visible state to true for the token from a transferred starting // window. We now reset it back to false since the starting window was the last diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index a90e08e4f372..6623d02e96a5 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -2020,7 +2020,7 @@ public class WindowManagerService extends IWindowManager.Stub } if (win.mActivityRecord != null) { - win.mActivityRecord.postWindowRemoveStartingWindowCleanup(); + win.mActivityRecord.postWindowRemoveStartingWindowCleanup(win); } if (win.mAttrs.type == TYPE_WALLPAPER) { |