summaryrefslogtreecommitdiff
path: root/core/java/android/view/SurfaceSession.java
diff options
context:
space:
mode:
authorchaviw <chaviw@google.com>2021-02-09 14:47:07 -0800
committerchaviw <chaviw@google.com>2021-02-09 14:54:42 -0800
commitff265e61777677ce256add37108bef5dae87a42e (patch)
tree96f308adc1722d883e5b61d105a76a56b18397b1 /core/java/android/view/SurfaceSession.java
parent0cc57111bbe6521e39424755c1865ddb6f98432e (diff)
Remove SurfaceSession.nativeKill
SurfaceSession.nativeKill would call SurfaceComposerClient.dispose. This was unsafe since it would only clear the ISurfaceComposerClient binder object, but the SurfaceComposerClient object could still be around. Instead, when calling SurfaceSession.kill, just remove the Java reference, but allow the dtor of SurfaceComposerClient to handle disposing the binder object. Test: Force app to restart while in a sync transaction. No longer shows an error Fixes: 179459565 Change-Id: I322e7f3bd4e7efb3d85d1afe3c4704283f58a985
Diffstat (limited to 'core/java/android/view/SurfaceSession.java')
-rw-r--r--core/java/android/view/SurfaceSession.java15
1 files changed, 7 insertions, 8 deletions
diff --git a/core/java/android/view/SurfaceSession.java b/core/java/android/view/SurfaceSession.java
index cbc0479a4c07..20f05981e962 100644
--- a/core/java/android/view/SurfaceSession.java
+++ b/core/java/android/view/SurfaceSession.java
@@ -32,7 +32,6 @@ public final class SurfaceSession {
private static native long nativeCreate();
private static native void nativeDestroy(long ptr);
- private static native void nativeKill(long ptr);
/** Create a new connection with the surface flinger. */
@UnsupportedAppUsage
@@ -44,22 +43,22 @@ public final class SurfaceSession {
@Override
protected void finalize() throws Throwable {
try {
- if (mNativeClient != 0) {
- nativeDestroy(mNativeClient);
- }
+ kill();
} finally {
super.finalize();
}
}
/**
- * Forcibly detach native resources associated with this object.
- * Unlike destroy(), after this call any surfaces that were created
- * from the session will no longer work.
+ * Remove the reference to the native Session object. The native object may still exist if
+ * there are other references to it, but it cannot be accessed from this Java object anymore.
*/
@UnsupportedAppUsage
public void kill() {
- nativeKill(mNativeClient);
+ if (mNativeClient != 0) {
+ nativeDestroy(mNativeClient);
+ mNativeClient = 0;
+ }
}
}