tpl_wayland_egl_thread: Fixed some bugs related to need_to_release flag. 10/177610/1
authorjoonbum.ko <joonbum.ko@samsung.com>
Wed, 2 May 2018 02:43:43 +0000 (11:43 +0900)
committerjoonbum.ko <joonbum.ko@samsung.com>
Wed, 2 May 2018 06:15:48 +0000 (15:15 +0900)
Change-Id: I694a4b0886caaf5fe89c81c4b293aca8f4034ee9
Signed-off-by: joonbum.ko <joonbum.ko@samsung.com>
src/tpl_wayland_egl_thread.c

index 521ee94..1aee12e 100644 (file)
@@ -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