From a6230149d9f3cf3749060d9c7ca911fef0d1b00b Mon Sep 17 00:00:00 2001 From: "joonbum.ko" Date: Wed, 2 May 2018 11:43:43 +0900 Subject: [PATCH] tpl_wayland_egl_thread: Fixed some bugs related to need_to_release flag. Change-Id: I694a4b0886caaf5fe89c81c4b293aca8f4034ee9 Signed-off-by: joonbum.ko --- src/tpl_wayland_egl_thread.c | 49 ++++++++++---------------------------------- 1 file changed, 11 insertions(+), 38 deletions(-) diff --git a/src/tpl_wayland_egl_thread.c b/src/tpl_wayland_egl_thread.c index 521ee94..1aee12e 100644 --- a/src/tpl_wayland_egl_thread.c +++ b/src/tpl_wayland_egl_thread.c @@ -1231,14 +1231,17 @@ __cb_buffer_release_callback(void *data, struct wl_proxy *wl_buffer) if (tbm_surface_internal_is_valid(tbm_surface)) { tbm_surface_internal_get_user_data(tbm_surface, KEY_BUFFER_INFO, (void **)&buf_info); + if (buf_info && buf_info->need_to_release) { twe_wl_surf_source *surf_source = buf_info->surf_source; tbm_surface_queue_error_e tsq_err; - tsq_err = tbm_surface_queue_release(surf_source->tbm_queue, - tbm_surface); - if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) - TPL_ERR("tbm_surface(%p) tsq_err(%d)", tbm_surface, tsq_err); + if (buf_info->sync_fd == -1) { + tsq_err = tbm_surface_queue_release(surf_source->tbm_queue, + tbm_surface); + if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) + TPL_ERR("tbm_surface(%p) tsq_err(%d)", tbm_surface, tsq_err); + } if (surf_source->committed_buffers) { g_mutex_lock(&surf_source->surf_mutex); @@ -1261,37 +1264,7 @@ __cb_buffer_release_callback(void *data, struct wl_proxy *wl_buffer) tbm_bo_export(tbm_surface_internal_get_bo(tbm_surface, 0))); tbm_surface_internal_unref(tbm_surface); - return; - } - - if (buf_info && buf_info->is_vk_image && !buf_info->need_to_release) { - twe_wl_surf_source *surf_source = buf_info->surf_source; - - g_mutex_lock(&surf_source->free_queue_mutex); - - if (surf_source->committed_buffers) { - g_mutex_lock(&surf_source->surf_mutex); - __tpl_list_remove_data(surf_source->committed_buffers, - (void *)tbm_surface, - TPL_FIRST, NULL); - g_mutex_unlock(&surf_source->surf_mutex); - } - - TRACE_MARK("[RELEASE] BO(%d)", - tbm_bo_export(tbm_surface_internal_get_bo(tbm_surface, 0))); - TRACE_ASYNC_END((int)tbm_surface, "[COMMIT ~ RELEASE] BO(%d)", - tbm_bo_export(tbm_surface_internal_get_bo( - tbm_surface, 0))); - - TPL_LOG_T(BACKEND, "[REL] wl_buffer(%p) tbm_surface(%p) bo(%d)", - buf_info->wl_buffer, tbm_surface, - tbm_bo_export(tbm_surface_internal_get_bo(tbm_surface, 0))); - - tbm_surface_internal_unref(tbm_surface); - - g_mutex_unlock(&surf_source->free_queue_mutex); } - } else { TPL_ERR("Invalid parameter | tbm_surface(%p)", tbm_surface); } @@ -1744,11 +1717,11 @@ _twe_thread_wl_vk_surface_commit(twe_wl_surf_source *surf_source, if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) TPL_ERR("Failed to release tbm_surface(%p) when vk_surface_commit.", tbm_surface); - buf_info->need_to_release = TPL_FALSE; - } else { - /* Dependent on wl_buffer release event. */ - buf_info->need_to_release = TPL_TRUE; } + + /* Dependent on wl_buffer release event. */ + buf_info->need_to_release = TPL_TRUE; + } static void -- 2.7.4