From ff910d2ba8d0e9e79677188d66ec993a505b7ea3 Mon Sep 17 00:00:00 2001 From: Robert Carr Date: Mon, 30 Apr 2018 18:25:55 -0700 Subject: [PATCH] SurfaceControl: Close CloseGuard when destroying surface in transaction. As this signifies releasing the native resources protected by the guard. See comment for more indepth discussion. Bug: 78629612 Test: Manual. Change-Id: Iee9fe9558b1fee171789580c48f4890c2be1c219 --- core/java/android/view/SurfaceControl.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java index 5deee11ba11e1..ed8b0053e5bfe 100644 --- a/core/java/android/view/SurfaceControl.java +++ b/core/java/android/view/SurfaceControl.java @@ -1580,6 +1580,20 @@ public class SurfaceControl implements Parcelable { */ public Transaction destroy(SurfaceControl sc) { sc.checkNotReleased(); + + /** + * Perhaps it's safer to transfer the close guard to the Transaction + * but then we have a whole wonky scenario regarding merging, multiple + * close-guards per transaction etc...the whole scenario is kind of wonky + * and it seems really we'd like to just be able to call release here + * but the WindowManager has some code that looks like + * --- destroyInTransaction(a) + * --- reparentChildrenInTransaction(a) + * so we need to ensure the SC remains valid until the transaction + * is applied. + */ + sc.mCloseGuard.close(); + nativeDestroy(mNativeObject, sc.mNativeObject); return this; }