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
This commit is contained in:
Robert Carr
2018-04-30 18:25:55 -07:00
parent 9411ab1589
commit ff910d2ba8

View File

@@ -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;
}