tpl_wayland_egl_thread: Add necessity check for buffer release 16/163716/3
authorHoyub Lee <hoyub.lee@samsung.com>
Wed, 13 Dec 2017 03:08:51 +0000 (12:08 +0900)
committerHoyub Lee <hoyub.lee@samsung.com>
Wed, 13 Dec 2017 05:13:45 +0000 (14:13 +0900)
On buffer release cb, there was no checking mechanism to check if this
buffer needs to be released or not.

This patch will add checking if this buffer has to be released or not.

Therefore, unnecessary buffer release cb will be detected and handled
correctly.

Change-Id: I51b9d614da44fac4919539749612ca024b56aa9a
Signed-off-by: Hoyub Lee <hoyub.lee@samsung.com>
src/tpl_wayland_egl_thread.c

index 4db6a8c..e8bf76b 100644 (file)
@@ -135,6 +135,9 @@ struct _twe_wl_buffer_info {
        int *rects;
        tpl_bool_t need_to_commit;
 
+       /* for checking need release */
+       tpl_bool_t need_to_release;
+
        /* for checking draw done */
        tpl_bool_t draw_done;
        tbm_fd draw_done_fence;
@@ -1292,7 +1295,7 @@ __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) {
+               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;
 
@@ -1311,6 +1314,8 @@ __cb_buffer_release_callback(void *data, struct wl_proxy *wl_buffer)
                                TPL_OBJECT_UNLOCK(&surf_source->obj);
                        }
 
+                       buf_info->need_to_release = TPL_FALSE;
+
                        TRACE_ASYNC_END((int)tbm_surface, "[COMMIT ~ RELEASE] BO(%d)",
                                                        tbm_bo_export(tbm_surface_internal_get_bo(
                                                                tbm_surface, 0)));
@@ -1806,6 +1811,7 @@ _twe_thread_wl_surface_commit(twe_wl_surf_source *surf_source,
                                          tbm_bo_export(tbm_surface_internal_get_bo(tbm_surface, 0)));
 
        buf_info->need_to_commit = TPL_FALSE;
+       buf_info->need_to_release = TPL_TRUE;
 
        TPL_LOG_T(BACKEND, "[COMMIT] wl_buffer(%p) tbm_surface(%p) bo(%d)",
                          buf_info->wl_buffer, tbm_surface,