Move unref to outside from buffer mutex. 20/269420/1
authorJoonbum Ko <joonbum.ko@samsung.com>
Thu, 13 Jan 2022 08:52:48 +0000 (17:52 +0900)
committerJoonbum Ko <joonbum.ko@samsung.com>
Fri, 14 Jan 2022 03:45:00 +0000 (12:45 +0900)
Change-Id: If2c0eb9ee17edf6febc830ec058b274b1eba5431
Signed-off-by: Joonbum Ko <joonbum.ko@samsung.com>
src/tpl_wl_egl_thread.c

index 8e633d69fa31f1618c5d9464828f87b307f9e7be..d7b730e8fb54b8b82ba3aab6a458dd50b7f032dd 100755 (executable)
@@ -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);
        }