lock/unlock when calling a tdm_output internal function
authorBoram Park <boram1288.park@samsung.com>
Wed, 19 Jul 2017 06:10:06 +0000 (15:10 +0900)
committerBoram Park <boram1288.park@samsung.com>
Wed, 19 Jul 2017 07:55:43 +0000 (16:55 +0900)
Change-Id: I0b3e4023f79309fd276142a9706e6ade564e001c

src/tdm_layer.c
src/tdm_output.c
src/tdm_vblank.c

index 9897c5c..6f7b16c 100644 (file)
@@ -870,6 +870,7 @@ tdm_layer_remove_commit_handler_internal(tdm_layer *layer, tdm_layer_commit_hand
        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) {
index 62ba065..2959526 100644 (file)
@@ -810,6 +810,7 @@ tdm_output_remove_vblank_handler_internal(tdm_output *output, tdm_output_vblank_
        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) {
@@ -828,6 +829,7 @@ tdm_output_remove_commit_handler_internal(tdm_output *output, tdm_output_commit_
        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) {
index 662204f..f851b0a 100644 (file)
@@ -275,7 +275,11 @@ _tdm_vblank_change_to_SW(tdm_private_vblank *private_vblank)
 
        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);
        }
@@ -289,7 +293,10 @@ _tdm_vblank_free_HW_wait(tdm_private_vblank *private_vblank, tdm_error error, un
        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);
@@ -1020,7 +1027,11 @@ tdm_vblank_wait(tdm_vblank *vblank, unsigned int req_sec, unsigned int req_usec,
        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;
        }