From: Konstantin Drabeniuk Date: Fri, 1 Sep 2017 11:04:09 +0000 (+0300) Subject: tbm_surface_queue_enqueue/release: changed the check for success X-Git-Tag: accepted/tizen/4.0/unified/20170920.081323~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F10%2F147210%2F2;p=platform%2Fcore%2Fuifw%2Flibtbm.git 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 --- 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;