static tdm_error _tdm_vblank_cb_vblank_SW(void *user_data);
static tdm_error _tdm_vblank_wait_SW(tdm_vblank_wait_info *wait_info);
+static void _tdm_vblank_cb_vblank_HW(tdm_output *output, unsigned int sequence,
+ unsigned int tv_sec, unsigned int tv_usec,
+ void *user_data);
#if 0
static void
pthread_mutex_lock(&valid_list_lock);
LIST_FOR_EACH_ENTRY(w, &valid_wait_list, valid_link) {
- if (w->stamp == wait_info->stamp) {
+ if (w == wait_info) {
pthread_mutex_unlock(&valid_list_lock);
return 1;
}
LIST_FOR_EACH_ENTRY_SAFE(w, ww, &private_vblank->HW_wait_list, link) {
LIST_DEL(&w->link);
+ tdm_output_remove_vblank_handler_internal(private_vblank->output, _tdm_vblank_cb_vblank_HW, w);
w->type = VBLANK_TYPE_SW_FAKE;
_tdm_vblank_wait_SW(w);
}
LIST_FOR_EACH_ENTRY_SAFE(w, ww, &private_vblank->HW_wait_list, link) {
LIST_DEL(&w->link);
_tdm_vblank_valid_list_del(&w->valid_link);
+ tdm_output_remove_vblank_handler_internal(private_vblank->output, _tdm_vblank_cb_vblank_HW, w);
if (call_cb && w->func)
w->func(private_vblank, error, 0, 0, 0, w->user_data);
if (ret != TDM_ERROR_NONE) {
LIST_DEL(&wait_info->link);
_tdm_vblank_valid_list_del(&wait_info->valid_link);
+ tdm_output_remove_vblank_handler_internal(private_vblank->output, _tdm_vblank_cb_vblank_HW, wait_info);
free(wait_info);
return ret;
}