surface_queue: Fix missing lock 93/307193/4
authorChangyeon Lee <cyeon.lee@samsung.com>
Wed, 6 Mar 2024 03:52:02 +0000 (12:52 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Wed, 6 Mar 2024 08:44:47 +0000 (17:44 +0900)
Change-Id: Ie58e1cf3cb8a6873a1b45196a6b52e18e6b70f4c

src/tbm_surface_queue.c

index 3f17764..5d90f8f 100644 (file)
@@ -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)