From: Joonbum Ko Date: Fri, 30 Sep 2022 07:23:50 +0000 (+0900) Subject: Changed the order of lock/unlock at buffer_clear. X-Git-Tag: accepted/tizen/7.0/unified/20221110.062136~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F59%2F282359%2F1;p=platform%2Fcore%2Fuifw%2Flibtpl-egl.git Changed the order of lock/unlock at buffer_clear. - The lock/unlock order of buffer->mutex and display->wl_event_mutex is important. display->mutex must surround buffer->mutex - Before applying this patch, deadlock issue may be occured in buffer_clear. Change-Id: I90d9b36874def4e4c7f0bd36742b3bbd00faab44 Signed-off-by: Joonbum Ko --- diff --git a/src/tpl_wl_egl_thread.c b/src/tpl_wl_egl_thread.c index f6c0375..4434972 100755 --- a/src/tpl_wl_egl_thread.c +++ b/src/tpl_wl_egl_thread.c @@ -2116,11 +2116,13 @@ _tpl_wl_egl_surface_buffer_clear(tpl_wl_egl_surface_t *wl_egl_surface) need_to_wait = (status < COMMITTED); if (need_to_wait) { - tpl_gmutex_unlock(&wl_egl_display->wl_event_mutex); + /* The lock/unlock order of buffer->mutex and display->wl_event_mutex + * is important. display->mutex must surround buffer->mutex */ + tpl_gmutex_unlock(&wl_egl_buffer->mutex); wait_result = tpl_gcond_timed_wait(&wl_egl_buffer->cond, - &wl_egl_buffer->mutex, - 200); /* 200ms */ - tpl_gmutex_lock(&wl_egl_display->wl_event_mutex); + &wl_egl_display->wl_event_mutex, + 200); /* 200ms */ + tpl_gmutex_lock(&wl_egl_buffer->mutex); if (wait_result == TPL_ERROR_TIME_OUT) TPL_WARN("timeout occured waiting signaled. wl_egl_buffer(%p)",