Clear all cached buffer when queue_force_flush 18/268718/1
authorJoonbum Ko <joonbum.ko@samsung.com>
Thu, 30 Dec 2021 06:37:10 +0000 (15:37 +0900)
committerJoonbum Ko <joonbum.ko@samsung.com>
Thu, 30 Dec 2021 07:32:03 +0000 (16:32 +0900)
Change-Id: Ic232153cfbdea49aea1a9fd862ac81f673f7814c
Signed-off-by: Joonbum Ko <joonbum.ko@samsung.com>
src/tpl_wl_egl_thread.c

index 43342c0..8e633d6 100755 (executable)
@@ -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);
 }