From c5d2f6139b2f3d2f6b67e94e238b7baa558d12b1 Mon Sep 17 00:00:00 2001 From: Joonbum Ko Date: Thu, 13 Jan 2022 17:52:48 +0900 Subject: [PATCH] Move unref to outside from buffer mutex. Change-Id: If2c0eb9ee17edf6febc830ec058b274b1eba5431 Signed-off-by: Joonbum Ko --- src/tpl_wl_egl_thread.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/tpl_wl_egl_thread.c b/src/tpl_wl_egl_thread.c index 8e633d6..d7b730e 100755 --- a/src/tpl_wl_egl_thread.c +++ b/src/tpl_wl_egl_thread.c @@ -2956,11 +2956,11 @@ __cb_buffer_fenced_release(void *data, tbm_surface = wl_egl_buffer->tbm_surface; if (tbm_surface_internal_is_valid(tbm_surface)) { + tbm_surface_queue_error_e tsq_err = TBM_SURFACE_QUEUE_ERROR_INVALID_SURFACE; tpl_gmutex_lock(&wl_egl_buffer->mutex); if (wl_egl_buffer->status == COMMITTED) { tpl_wl_egl_surface_t *wl_egl_surface = wl_egl_buffer->wl_egl_surface; - tbm_surface_queue_error_e tsq_err; zwp_linux_buffer_release_v1_destroy(wl_egl_buffer->buffer_release); wl_egl_buffer->buffer_release = NULL; @@ -2984,12 +2984,13 @@ __cb_buffer_fenced_release(void *data, tbm_surface); if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) TPL_ERR("tbm_surface(%p) tsq_err(%d)", tbm_surface, tsq_err); - - tbm_surface_internal_unref(tbm_surface); } tpl_gmutex_unlock(&wl_egl_buffer->mutex); + if (tsq_err == TBM_SURFACE_QUEUE_ERROR_NONE) + tbm_surface_internal_unref(tbm_surface); + } else { TPL_ERR("Invalid parameter | tbm_surface(%p)", tbm_surface); } @@ -3007,11 +3008,11 @@ __cb_buffer_immediate_release(void *data, tbm_surface = wl_egl_buffer->tbm_surface; if (tbm_surface_internal_is_valid(tbm_surface)) { + tbm_surface_queue_error_e tsq_err = TBM_SURFACE_QUEUE_ERROR_INVALID_SURFACE; tpl_gmutex_lock(&wl_egl_buffer->mutex); if (wl_egl_buffer->status == COMMITTED) { tpl_wl_egl_surface_t *wl_egl_surface = wl_egl_buffer->wl_egl_surface; - tbm_surface_queue_error_e tsq_err; zwp_linux_buffer_release_v1_destroy(wl_egl_buffer->buffer_release); wl_egl_buffer->buffer_release = NULL; @@ -3033,12 +3034,13 @@ __cb_buffer_immediate_release(void *data, tbm_surface); if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) TPL_ERR("tbm_surface(%p) tsq_err(%d)", tbm_surface, tsq_err); - - tbm_surface_internal_unref(tbm_surface); } tpl_gmutex_unlock(&wl_egl_buffer->mutex); + if (tsq_err == TBM_SURFACE_QUEUE_ERROR_NONE) + tbm_surface_internal_unref(tbm_surface); + } else { TPL_ERR("Invalid parameter | tbm_surface(%p)", tbm_surface); } -- 2.7.4