tdm_private_layer_commit_handler *lm = NULL, *lmm = NULL;
TDM_RETURN_IF_FAIL(private_layer != NULL);
+ TDM_RETURN_IF_FAIL(TDM_MUTEX_IS_LOCKED());
LIST_FOR_EACH_ENTRY_SAFE(lm, lmm, &private_output->layer_commit_handler_list, link) {
if (lm->func == func && lm->user_data == user_data) {
tdm_private_vblank_handler *v = NULL;
TDM_RETURN_IF_FAIL(private_output != NULL);
+ TDM_RETURN_IF_FAIL(TDM_MUTEX_IS_LOCKED());
LIST_FOR_EACH_ENTRY(v, &private_output->vblank_handler_list, link) {
if (v->func == func && v->user_data == user_data) {
tdm_private_output_commit_handler *c = NULL;
TDM_RETURN_IF_FAIL(private_output != NULL);
+ TDM_RETURN_IF_FAIL(TDM_MUTEX_IS_LOCKED());
LIST_FOR_EACH_ENTRY(c, &private_output->output_commit_handler_list, link) {
if (c->func == func && c->user_data == user_data) {
LIST_FOR_EACH_ENTRY_SAFE(w, ww, &private_vblank->HW_wait_list, link) {
LIST_DEL(&w->link);
+
+ tdm_display_lock(private_vblank->dpy);
tdm_output_remove_vblank_handler_internal(private_vblank->output, _tdm_vblank_cb_vblank_HW, w);
+ tdm_display_unlock(private_vblank->dpy);
+
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_display_lock(private_vblank->dpy);
tdm_output_remove_vblank_handler_internal(private_vblank->output, _tdm_vblank_cb_vblank_HW, w);
+ tdm_display_unlock(private_vblank->dpy);
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_display_lock(private_vblank->dpy);
tdm_output_remove_vblank_handler_internal(private_vblank->output, _tdm_vblank_cb_vblank_HW, wait_info);
+ tdm_display_unlock(private_vblank->dpy);
+
free(wait_info);
return ret;
}