wl_egl_surface->presentation_sync.fd = -1;
}
- if (wl_egl_surface->vblank && wl_egl_surface->vblank->waiting_buffers) {
- __tpl_list_free(wl_egl_surface->vblank->waiting_buffers, NULL);
- wl_egl_surface->vblank->waiting_buffers = NULL;
- }
-
tpl_gmutex_unlock(&wl_egl_surface->presentation_sync.mutex);
if (wl_egl_surface->surface_sync) {
wl_egl_surface->tss_flusher = NULL;
}
+ if (wl_egl_surface->vblank && wl_egl_surface->vblank->waiting_buffers) {
+ __tpl_list_free(wl_egl_surface->vblank->waiting_buffers, NULL);
+ wl_egl_surface->vblank->waiting_buffers = NULL;
+ }
+
if (wl_egl_surface->vblank) {
__tpl_list_remove_data(wl_egl_display->tdm.surface_vblanks,
(void *)wl_egl_surface->vblank,
TPL_FIRST,
__cb_surface_vblank_free);
+ wl_egl_surface->vblank = NULL;
}
if (wl_egl_surface->tbm_queue) {
tpl_bool_t need_to_wait = TPL_FALSE;
tpl_result_t wait_result = TPL_ERROR_NONE;
- if (!wl_egl_display->use_explicit_sync &&
- status < WAITING_VBLANK)
- need_to_wait = TPL_TRUE;
-
- if (wl_egl_display->use_explicit_sync &&
- status < COMMITTED)
- need_to_wait = TPL_TRUE;
+ need_to_wait = (status < COMMITTED);
if (need_to_wait) {
tpl_gmutex_unlock(&wl_egl_display->wl_event_mutex);
tpl_gmutex_lock(&wl_egl_buffer->mutex);
wl_egl_buffer->status = WAITING_VBLANK;
- tpl_gcond_signal(&wl_egl_buffer->cond);
tpl_gmutex_unlock(&wl_egl_buffer->mutex);
tpl_gmutex_lock(&wl_egl_surface->surf_mutex);
wl_egl_surface->vblank_done = TPL_TRUE;
tpl_gmutex_lock(&wl_egl_surface->surf_mutex);
- wl_egl_buffer = (tpl_wl_egl_buffer_t *)__tpl_list_pop_front(
- wl_egl_surface->vblank->waiting_buffers,
- NULL);
- if (wl_egl_buffer)
- _thread_wl_surface_commit(wl_egl_surface, wl_egl_buffer);
+ if (wl_egl_surface->vblank && wl_egl_surface->vblank->waiting_buffers) {
+ wl_egl_buffer = (tpl_wl_egl_buffer_t *)__tpl_list_pop_front(
+ wl_egl_surface->vblank->waiting_buffers,
+ NULL);
+
+ if (wl_egl_buffer)
+ _thread_wl_surface_commit(wl_egl_surface, wl_egl_buffer);
+ }
tpl_gmutex_unlock(&wl_egl_surface->surf_mutex);
}
/* -- END -- tdm_client vblank callback function */