From 7fb2891673c215ef006b143ec21da3205ff0f484 Mon Sep 17 00:00:00 2001 From: John Reck Date: Wed, 23 Nov 2022 16:15:39 -0500 Subject: [PATCH] Fix deadlock mSurface.destroy() may block on a HardwareRenderer if lockHardwareCanvas is used. mSurfaceControlLock is also used on the RenderThread, so it cannot hold that lock when potentially calling into HardwareRenderer as this is a deadlock risk. Fixes: 244616968 Test: guess Change-Id: Iedb6f3ce80f47a67b4427550f27851c3b9e3e242 --- core/java/android/view/SurfaceView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index 720813ad81ef7..33ea92de68b4c 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -728,8 +728,8 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall private void releaseSurfaces(boolean releaseSurfacePackage) { mAlpha = 1f; + mSurface.destroy(); synchronized (mSurfaceControlLock) { - mSurface.destroy(); if (mBlastBufferQueue != null) { mBlastBufferQueue.destroy(); mBlastBufferQueue = null;