To avoid blocking other EGL calls, release the display mutex before
we enqueue buffer to android frameworks and re-acquire the mutex
upon return.

TEST=verify pinch zoom in Photos app no longer causes hangs

Signed-off-by: Haixia Shi <[email protected]>
---
 src/egl/drivers/dri2/platform_android.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/egl/drivers/dri2/platform_android.c 
b/src/egl/drivers/dri2/platform_android.c
index 25d02f5..f3e5d38 100644
--- a/src/egl/drivers/dri2/platform_android.c
+++ b/src/egl/drivers/dri2/platform_android.c
@@ -434,8 +434,15 @@ droid_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, 
_EGLSurface *draw)
 
    dri2_flush_drawable_for_swapbuffers(disp, draw);
 
-   if (dri2_surf->buffer)
+   if (dri2_surf->buffer) {
+      /* To avoid blocking other EGL calls, release the display mutex before
+       * we enter droid_window_enqueue_buffer() and re-acquire the mutex upon
+       * return.
+       */
+      mtx_unlock(&disp->Mutex);
       droid_window_enqueue_buffer(dri2_surf);
+      mtx_lock(&disp->Mutex);
+   }
 
    (*dri2_dpy->flush->invalidate)(dri2_surf->dri_drawable);
 
-- 
2.8.0.rc3.226.g39d4020

_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to