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;
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;
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)));
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,