From: Joonbum Ko Date: Thu, 27 Oct 2022 15:02:58 +0000 (+0900) Subject: wl_egl: Add defense code for fake signal in buffer_clear X-Git-Tag: accepted/tizen/unified/20221102.085201~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3a28f16f753bf42ac47d2dd635e21894fa459c65;p=platform%2Fcore%2Fuifw%2Flibtpl-egl.git wl_egl: Add defense code for fake signal in buffer_clear tpl_gcond_timed_wait is changed to be called within the while loop. It will repeat the process of checking status even if it wakes up due to Fake Signal. Change-Id: Ia66810da64ba2830c166f01dcb2f2f4615fc8e4f Signed-off-by: Joonbum Ko --- diff --git a/src/tpl_wl_egl_thread.c b/src/tpl_wl_egl_thread.c index fb9286f..67c14a1 100755 --- a/src/tpl_wl_egl_thread.c +++ b/src/tpl_wl_egl_thread.c @@ -2116,19 +2116,17 @@ _tpl_wl_egl_surface_buffer_clear(tpl_wl_egl_surface_t *wl_egl_surface) status_to_string[status]); if (status >= ENQUEUED) { - tpl_bool_t need_to_wait = TPL_FALSE; tpl_result_t wait_result = TPL_ERROR_NONE; - need_to_wait = (status < COMMITTED); - - if (need_to_wait) { + while (status < COMMITTED && wait_result != TPL_ERROR_TIME_OUT) { + tpl_gmutex_unlock(&wl_egl_buffer->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_display->wl_event_mutex, 200); /* 200ms */ tpl_gmutex_lock(&wl_egl_buffer->mutex); + status = wl_egl_buffer->status; /* update status */ if (wait_result == TPL_ERROR_TIME_OUT) TPL_WARN("timeout occured waiting signaled. wl_egl_buffer(%p)", @@ -2136,8 +2134,6 @@ _tpl_wl_egl_surface_buffer_clear(tpl_wl_egl_surface_t *wl_egl_surface) } } - status = wl_egl_buffer->status; /* update status */ - /* ACQUIRED, WAITING_SIGNALED, WAITING_VBLANK, COMMITTED */ /* It has been acquired but has not yet been released, so this * buffer must be released. */