if (gsource->gsource_funcs && gsource->gsource_funcs->finalize)
gsource->gsource_funcs->finalize(gsource);
- if (gsource->fd_type == FD_TYPE_EVENT)
+ if (gsource->fd_type == FD_TYPE_EVENT ||
+ gsource->fd_type == FD_TYPE_FENCE)
close(gsource->fd);
gsource->fd = -1;
g_source_remove_unix_fd(&source->gsource, source->tag);
g_source_destroy(&source->gsource);
g_source_unref(&source->gsource);
+
+ source->data = NULL;
}
void
if (g_source_is_destroyed(&source->gsource)) {
TPL_WARN("gsource(%p) already has been destroyed.",
source);
+ source->data = NULL;
return;
}
if (!destroy_in_thread) {
__gsource_remove_and_destroy(source);
}
+
g_mutex_unlock(&thread->thread_mutex);
}
{
tpl_wl_egl_buffer_t *wl_egl_buffer =
(tpl_wl_egl_buffer_t *)tpl_gsource_get_data(gsource);
+ TPL_CHECK_ON_NULL_RETURN_VAL(wl_egl_buffer, TPL_FALSE);
+
tpl_wl_egl_surface_t *wl_egl_surface = wl_egl_buffer->wl_egl_surface;
+ TPL_CHECK_ON_NULL_RETURN_VAL(wl_egl_surface, TPL_FALSE);
+
tbm_surface_h tbm_surface = wl_egl_buffer->tbm_surface;
+ TPL_CHECK_ON_NULL_RETURN_VAL(tbm_surface, TPL_FALSE);
+ TPL_CHECK_ON_FALSE_RETURN_VAL(tbm_surface_internal_is_valid(tbm_surface), TPL_FALSE);
wl_egl_surface->render_done_cnt++;
wl_egl_surface, wl_egl_buffer, wl_egl_buffer->waiting_source,
wl_egl_buffer->acquire_fence_fd);
- close(wl_egl_buffer->acquire_fence_fd);
wl_egl_buffer->acquire_fence_fd = -1;
wl_egl_buffer->waiting_source = NULL;
wl_egl_buffer->num_rects = 0;
}
+ wl_egl_buffer->wl_egl_surface = NULL;
wl_egl_buffer->tbm_surface = NULL;
wl_egl_buffer->bo_name = -1;
wl_egl_buffer->status = RELEASED;