diff options
| author | chaviw <chaviw@google.com> | 2021-02-09 14:47:07 -0800 |
|---|---|---|
| committer | chaviw <chaviw@google.com> | 2021-02-09 14:54:42 -0800 |
| commit | ff265e61777677ce256add37108bef5dae87a42e (patch) | |
| tree | 96f308adc1722d883e5b61d105a76a56b18397b1 /core/java/android/view/SurfaceSession.java | |
| parent | 0cc57111bbe6521e39424755c1865ddb6f98432e (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.java | 15 |
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; + } } } |
