From 5488b91181e0a3defa8a2e42658c913220d92174 Mon Sep 17 00:00:00 2001 From: Konstantin Drabeniuk Date: Fri, 1 Sep 2017 14:04:09 +0300 Subject: [PATCH] tbm_surface_queue_enqueue/release: changed the check for success Now when we enqueue the first surface(dirty queue is empty) to queue we get the TBM_SURFACE_QUEUE_ERROR_EMPTY error if the enqueue operation is failed(_tbm_surface_queue_enqueue() or surface_queue->impl->enqueue() is failed). When we don't acquire the first surface and enqueue the second surface (dirty queue is not empty) to queue we don't get the TBM_SURFACE_QUEUE_ERROR_EMPTY error if the enqueue operation is failed. I think we should check whether there is a surface(which we try to enqueue) in the dirty_queue. The same for the release operation. Change-Id: I7027e7869419a2dc3c912465778ecde89a79aee3 Signed-off-by: Konstantin Drabeniuk --- src/tbm_surface_queue.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/tbm_surface_queue.c b/src/tbm_surface_queue.c index f91d4ed..fb80c3d 100644 --- a/src/tbm_surface_queue.c +++ b/src/tbm_surface_queue.c @@ -1102,12 +1102,12 @@ tbm_surface_queue_enqueue(tbm_surface_queue_h else _tbm_surface_queue_enqueue(surface_queue, node, 1); - if (_queue_is_empty(&surface_queue->dirty_queue)) { - TBM_LOG_E("enqueue surface but queue is empty node:%p\n", node); + if (!_queue_get_node(surface_queue, DIRTY_QUEUE, surface, NULL)) { + TBM_LOG_E("enqueue surface(%p) but surface isn't present in the dirty_queue\n", surface); pthread_mutex_unlock(&surface_queue->lock); _tbm_surf_queue_mutex_unlock(); - return TBM_SURFACE_QUEUE_ERROR_EMPTY; + return TBM_SURFACE_ERROR_INVALID_OPERATION; } node->type = QUEUE_NODE_TYPE_ENQUEUE; @@ -1394,12 +1394,12 @@ tbm_surface_queue_release(tbm_surface_queue_h else _tbm_surface_queue_release(surface_queue, node, 1); - if (_queue_is_empty(&surface_queue->free_queue)) { + if (!_queue_get_node(surface_queue, FREE_QUEUE, surface, NULL)) { + TBM_LOG_E("release surface(%p) but surface isn't present in the free_queue\n", surface); pthread_mutex_unlock(&surface_queue->lock); - TBM_LOG_E("surface_queue->free_queue is empty.\n"); _tbm_surf_queue_mutex_unlock(); - return TBM_SURFACE_QUEUE_ERROR_EMPTY; + return TBM_SURFACE_ERROR_INVALID_OPERATION; } node->type = QUEUE_NODE_TYPE_RELEASE; -- 2.7.4