From 5b60b3b5509130d859f9448a37d7d516cf7444d7 Mon Sep 17 00:00:00 2001 From: Joonbum Ko Date: Thu, 30 Dec 2021 15:37:10 +0900 Subject: [PATCH] Clear all cached buffer when queue_force_flush Change-Id: Ic232153cfbdea49aea1a9fd862ac81f673f7814c Signed-off-by: Joonbum Ko --- src/tpl_wl_egl_thread.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/tpl_wl_egl_thread.c b/src/tpl_wl_egl_thread.c index 43342c0..8e633d6 100755 --- a/src/tpl_wl_egl_thread.c +++ b/src/tpl_wl_egl_thread.c @@ -2259,11 +2259,19 @@ _tbm_queue_force_flush(tpl_wl_egl_surface_t *wl_egl_surface) int i; tpl_wl_egl_buffer_t *wl_egl_buffer = NULL; for (i = 0; i < BUFFER_ARRAY_SIZE; i++) { + buffer_status_t status; tpl_gmutex_lock(&wl_egl_surface->buffers_mutex); wl_egl_buffer = wl_egl_surface->buffers[i]; tpl_gmutex_unlock(&wl_egl_surface->buffers_mutex); - if (wl_egl_buffer && wl_egl_buffer->status == COMMITTED) { - wl_egl_buffer->status = RELEASED; + if (wl_egl_buffer) { + tpl_gmutex_lock(&wl_egl_buffer->mutex); + status = wl_egl_buffer->status; + tpl_gmutex_unlock(&wl_egl_buffer->mutex); + } else { + continue; + } + + if (status > ENQUEUED && status <= COMMITTED) { tsq_err = tbm_surface_queue_release(wl_egl_surface->tbm_queue, wl_egl_buffer->tbm_surface); if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) @@ -2278,6 +2286,8 @@ _tbm_queue_force_flush(tpl_wl_egl_surface_t *wl_egl_surface) "wl_egl_surface(%p) tbm_queue(%p)", wl_egl_surface, wl_egl_surface->tbm_queue); + _print_buffer_lists(wl_egl_surface); + return TPL_ERROR_NONE; } @@ -3535,6 +3545,7 @@ __cb_wl_egl_buffer_free(tpl_wl_egl_buffer_t *wl_egl_buffer) wl_display_flush(wl_egl_display->wl_display); } + tpl_gmutex_lock(&wl_egl_buffer->mutex); #if TIZEN_FEATURE_ENABLE if (wl_egl_buffer->buffer_release) { zwp_linux_buffer_release_v1_destroy(wl_egl_buffer->buffer_release); @@ -3580,6 +3591,9 @@ __cb_wl_egl_buffer_free(tpl_wl_egl_buffer_t *wl_egl_buffer) wl_egl_buffer->bo_name = -1; wl_egl_buffer->status = RELEASED; + tpl_gmutex_unlock(&wl_egl_buffer->mutex); + tpl_gmutex_clear(&wl_egl_buffer->mutex); + tpl_gcond_clear(&wl_egl_buffer->cond); free(wl_egl_buffer); } -- 2.7.4