tpl_wayland_egl_thread: Add tbm_surface_queue_release on buffer flush cb 56/162356/2
authorjoonbum.ko <joonbum.ko@samsung.com>
Thu, 30 Nov 2017 11:20:55 +0000 (20:20 +0900)
committerjoonbum.ko <joonbum.ko@samsung.com>
Thu, 30 Nov 2017 11:25:57 +0000 (20:25 +0900)
 This patch fixes the case that unnecessary buffer release cb is called
  after buffer flush.

Change-Id: Iaa2023ecb6d990815e89b63a48f6709e694bbaeb
Signed-off-by: joonbum.ko <joonbum.ko@samsung.com>
src/tpl_wayland_egl_thread.c

index 07b2d35..4db6a8c 100644 (file)
@@ -1193,6 +1193,20 @@ static void __cb_tss_flusher_flush_callback(void *data,
                TPL_OBJECT_LOCK(&surf_source->obj);
                __tpl_list_fini(surf_source->committed_buffers,
                                                (tpl_free_func_t)__cb_buffer_remove_from_list);
+               while (!__tpl_list_is_empty(surf_source->committed_buffers)) {
+                       tbm_surface_queue_error_e tsq_err = TBM_SURFACE_QUEUE_ERROR_NONE;
+                       tbm_surface_h tbm_surface =
+                               __tpl_list_pop_front(surf_source->committed_buffers,
+                                       (tpl_free_func_t)__cb_buffer_remove_from_list);
+
+                       TRACE_ASYNC_END((int)tbm_surface, "[COMMIT ~ RELEASE] BO(%d)",
+                                                       tbm_bo_export(tbm_surface_internal_get_bo(
+                                                               tbm_surface, 0)));
+                       tsq_err = tbm_surface_queue_release(surf_source->tbm_queue, tbm_surface);
+                       if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE)
+                               TPL_ERR("Failed to release. tbm_surface(%p) tsq_err(%d)",
+                                               tbm_surface, tsq_err);
+               }
                TPL_OBJECT_UNLOCK(&surf_source->obj);
        }