From: Joonbum Ko Date: Fri, 24 Dec 2021 01:40:41 +0000 (+0900) Subject: Initialize last_deq_buffer to NULL when it free. X-Git-Tag: submit/tizen/20211227.044152~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1155aad24dff7c04ef6c98510117bdafea71900c;p=platform%2Fcore%2Fuifw%2Flibtpl-egl.git Initialize last_deq_buffer to NULL when it free. Problem : DEQ -> ENQ -> ACQ -> VBLANK -> COMMIT -> RELEASE -> QUEUE_RESET -> last_deq_buffer free -> try DEQ !!< will be blocked. Init wl_egl_surface->last_deq_buffer to NULL when it was free to prevent to access the wrong pointer of last_deq_buffer. Change-Id: Ic619b6a27a098b3de06c5733cec171538f921165 Signed-off-by: Joonbum Ko --- diff --git a/src/tpl_wl_egl_thread.c b/src/tpl_wl_egl_thread.c index 62fba27..59c0d4c 100755 --- a/src/tpl_wl_egl_thread.c +++ b/src/tpl_wl_egl_thread.c @@ -2436,7 +2436,7 @@ __tpl_wl_egl_surface_dequeue_buffer(tpl_surface_t *surface, uint64_t timeout_ns, tpl_wl_egl_buffer_t *last_deq_buffer = wl_egl_surface->last_deq_buffer; tpl_gmutex_lock(&last_deq_buffer->mutex); - if (last_deq_buffer->status > RELEASED && + if (last_deq_buffer->status > ENQUEUED && last_deq_buffer->status < COMMITTED) { tpl_result_t wait_result; wait_result = tpl_cond_timed_wait(&last_deq_buffer->cond, @@ -3502,6 +3502,10 @@ __cb_wl_egl_buffer_free(tpl_wl_egl_buffer_t *wl_egl_buffer) wl_egl_buffer->idx = -1; } + + if (wl_egl_surface->last_deq_buffer == wl_egl_buffer) + wl_egl_surface->last_deq_buffer = NULL; + tpl_gmutex_unlock(&wl_egl_surface->buffers_mutex); if (wl_egl_surface->vblank && wl_egl_surface->vblank->waiting_buffers) {