summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Vishnu Nair <vishnun@google.com> 2024-08-27 23:14:31 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-08-27 23:14:31 +0000
commit06b47e58829b6dfdf45da3cfd14d6d76b3c3e970 (patch)
treedc9b1b5cf9b2b518eb09c00c872def8d63758633
parent4f2db8546030c13ab541d9d0af42983a94c33817 (diff)
parent600eb03136a47116d330bf990440671cb5e9e681 (diff)
Merge "Fix a crash in TrustedOverlayHost" into main
-rw-r--r--services/core/java/com/android/server/wm/TrustedOverlayHost.java15
1 files changed, 10 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/TrustedOverlayHost.java b/services/core/java/com/android/server/wm/TrustedOverlayHost.java
index 9b868bebd868..5f3c5583e024 100644
--- a/services/core/java/com/android/server/wm/TrustedOverlayHost.java
+++ b/services/core/java/com/android/server/wm/TrustedOverlayHost.java
@@ -112,11 +112,16 @@ class TrustedOverlayHost {
final SurfaceControl.Transaction t = mWmService.mTransactionFactory.get();
for (int i = mOverlays.size() - 1; i >= 0; i--) {
- SurfaceControlViewHost.SurfacePackage l = mOverlays.get(i);
- if (l.getSurfaceControl().isSameSurface(p.getSurfaceControl())) {
- mOverlays.remove(i);
- t.reparent(l.getSurfaceControl(), null);
- l.release();
+ SurfaceControlViewHost.SurfacePackage l = mOverlays.get(i);
+ SurfaceControl overlaySurfaceControl = l.getSurfaceControl();
+ if (overlaySurfaceControl == null) {
+ // Remove the overlay if the surfacepackage was released. Ownership
+ // is shared, so this may happen.
+ mOverlays.remove(i);
+ } else if (overlaySurfaceControl.isSameSurface(p.getSurfaceControl())) {
+ mOverlays.remove(i);
+ t.reparent(l.getSurfaceControl(), null);
+ l.release();
}
}
t.apply();