From e95c62d74ab1423e59b5784e29fd6c494164e0cc Mon Sep 17 00:00:00 2001 From: John Reck Date: Tue, 18 Aug 2020 12:37:43 -0700 Subject: [PATCH] Fix crash regression when calling setSurface(null) Test: HardwareRendererTests#testSetNullSurface Fixes: 165335939 Change-Id: I8f93a0b6a115088af634e21e91b95b4f6a521f12 --- libs/hwui/jni/android_graphics_HardwareRenderer.cpp | 4 +++- libs/hwui/renderthread/RenderProxy.cpp | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/libs/hwui/jni/android_graphics_HardwareRenderer.cpp b/libs/hwui/jni/android_graphics_HardwareRenderer.cpp index fc594da197085..e817ca744c587 100644 --- a/libs/hwui/jni/android_graphics_HardwareRenderer.cpp +++ b/libs/hwui/jni/android_graphics_HardwareRenderer.cpp @@ -184,7 +184,9 @@ static void android_view_ThreadedRenderer_setSurface(JNIEnv* env, jobject clazz, proxy->setSwapBehavior(SwapBehavior::kSwap_discardBuffer); } proxy->setSurface(window, enableTimeout); - ANativeWindow_release(window); + if (window) { + ANativeWindow_release(window); + } } static jboolean android_view_ThreadedRenderer_pause(JNIEnv* env, jobject clazz, diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp index aad0cca80cdc4..b51f6dcfc66f4 100644 --- a/libs/hwui/renderthread/RenderProxy.cpp +++ b/libs/hwui/renderthread/RenderProxy.cpp @@ -77,10 +77,10 @@ void RenderProxy::setName(const char* name) { } void RenderProxy::setSurface(ANativeWindow* window, bool enableTimeout) { - ANativeWindow_acquire(window); + if (window) { ANativeWindow_acquire(window); } mRenderThread.queue().post([this, win = window, enableTimeout]() mutable { mContext->setSurface(win, enableTimeout); - ANativeWindow_release(win); + if (win) { ANativeWindow_release(win); } }); }