From 68e3d10620f4969198f775616b8f40b4cff0b399 Mon Sep 17 00:00:00 2001 From: Changyeon Lee Date: Wed, 6 Mar 2024 12:52:02 +0900 Subject: [PATCH] surface_queue: Fix missing lock Change-Id: Ie58e1cf3cb8a6873a1b45196a6b52e18e6b70f4c --- src/tbm_surface_queue.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/tbm_surface_queue.c b/src/tbm_surface_queue.c index 3f17764..5d90f8f 100644 --- a/src/tbm_surface_queue.c +++ b/src/tbm_surface_queue.c @@ -1008,10 +1008,14 @@ tbm_surface_queue_get_width(tbm_surface_queue_h surface_queue) TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue), 0); + pthread_mutex_lock(&surface_queue->lock); + TBM_TRACE_SURFACE_QUEUE("tbm_surface_queue(%p)", surface_queue); width = surface_queue->width; + pthread_mutex_unlock(&surface_queue->lock); + _tbm_surf_queue_mutex_unlock(); return width; @@ -1027,10 +1031,14 @@ tbm_surface_queue_get_height(tbm_surface_queue_h surface_queue) TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue), 0); + pthread_mutex_lock(&surface_queue->lock); + TBM_TRACE_SURFACE_QUEUE("tbm_surface_queue(%p)", surface_queue); height = surface_queue->height; + pthread_mutex_unlock(&surface_queue->lock); + _tbm_surf_queue_mutex_unlock(); return height; @@ -1048,8 +1056,12 @@ tbm_surface_queue_get_format(tbm_surface_queue_h surface_queue) TBM_TRACE_SURFACE_QUEUE("tbm_surface_queue(%p)", surface_queue); + pthread_mutex_lock(&surface_queue->lock); + format = surface_queue->format; + pthread_mutex_unlock(&surface_queue->lock); + _tbm_surf_queue_mutex_unlock(); return format; @@ -1065,10 +1077,14 @@ tbm_surface_queue_get_size(tbm_surface_queue_h surface_queue) TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue), 0); + pthread_mutex_lock(&surface_queue->lock); + TBM_TRACE_SURFACE_QUEUE("tbm_surface_queue(%p)", surface_queue); queue_size = surface_queue->queue_size; + pthread_mutex_unlock(&surface_queue->lock); + _tbm_surf_queue_mutex_unlock(); return queue_size; @@ -1773,14 +1789,15 @@ tbm_surface_queue_reset(tbm_surface_queue_h TBM_TRACE_SURFACE_QUEUE("tbm_surface_queue(%p)", surface_queue); + pthread_mutex_lock(&surface_queue->lock); + if (width == surface_queue->width && height == surface_queue->height && format == surface_queue->format) { + pthread_mutex_unlock(&surface_queue->lock); _tbm_surf_queue_mutex_unlock(); return TBM_SURFACE_QUEUE_ERROR_NONE; } - pthread_mutex_lock(&surface_queue->lock); - surface_queue->width = width; surface_queue->height = height; surface_queue->format = format; @@ -2002,13 +2019,14 @@ tbm_surface_queue_flush(tbm_surface_queue_h surface_queue) TBM_TRACE_SURFACE_QUEUE("tbm_surface_queue(%p)", surface_queue); + pthread_mutex_lock(&surface_queue->lock); + if (surface_queue->num_attached == 0) { + pthread_mutex_unlock(&surface_queue->lock); _tbm_surf_queue_mutex_unlock(); return TBM_SURFACE_QUEUE_ERROR_NONE; } - pthread_mutex_lock(&surface_queue->lock); - if (surface_queue->modes & TBM_SURFACE_QUEUE_MODE_GUARANTEE_CYCLE) { /* Destory surface and Push to free_queue */ LIST_FOR_EACH_ENTRY_SAFE(node, tmp, &surface_queue->free_queue.head, item_link) -- 2.7.4