From d71f22895842611f3da167a328351be931e2e0af Mon Sep 17 00:00:00 2001 From: Junkyeong Kim Date: Wed, 13 Feb 2019 16:54:50 +0900 Subject: [PATCH] tdm: check mutex lock status in tdm_display_destroy_private_output some cases the mutex is not locked when called tdm_display_destroy_private_output. so in this case, do not execute mutex unlock/lock for vblank destroy. Change-Id: Ic1439f9d66d763fac00613a37c0154eb0e7c1384 Signed-off-by: Junkyeong Kim --- src/tdm.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/tdm.c b/src/tdm.c index 21bd918..81e653a 100644 --- a/src/tdm.c +++ b/src/tdm.c @@ -262,6 +262,7 @@ tdm_display_destroy_private_output(tdm_private_output *private_output) tdm_private_output_change_handler *h = NULL, *hh = NULL; tdm_private_output_destroy_handler *dh = NULL, *dhh = NULL; tdm_error ret; + int mutex_locked = 0; ret = tdm_output_call_thread_cb_destroy(private_output); TDM_WARNING_IF_FAIL(ret == TDM_ERROR_NONE); @@ -312,18 +313,19 @@ tdm_display_destroy_private_output(tdm_private_output *private_output) free(dh); } + if (tdm_thread_is_running() && TDM_MUTEX_IS_LOCKED()) mutex_locked = 1; if (private_output->vblank) { /* tdm_vblank APIs is for server. it should be called in unlock status*/ - _pthread_mutex_unlock(&private_display->lock); + if (mutex_locked) _pthread_mutex_unlock(&private_display->lock); tdm_vblank_destroy(private_output->vblank); - _pthread_mutex_lock(&private_display->lock); + if (mutex_locked) _pthread_mutex_lock(&private_display->lock); } if (private_output->ttrace_vblank) { /* tdm_vblank APIs is for server. it should be called in unlock status*/ - _pthread_mutex_unlock(&private_display->lock); + if (mutex_locked) _pthread_mutex_unlock(&private_display->lock); tdm_vblank_destroy(private_output->ttrace_vblank); - _pthread_mutex_lock(&private_display->lock); + if (mutex_locked) _pthread_mutex_lock(&private_display->lock); } LIST_FOR_EACH_ENTRY_SAFE(c, cc, &private_output->capture_list, link) -- 2.7.4