diff options
-rw-r--r-- | services/core/java/com/android/server/wm/TrustedOverlayHost.java | 15 |
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(); |