tbm_surface_queue_enqueue/release: changed the check for success 10/147210/2
authorKonstantin Drabeniuk <k.drabeniuk@samsung.com>
Fri, 1 Sep 2017 11:04:09 +0000 (14:04 +0300)
committerKonstantin Drabeniuk <k.drabeniuk@samsung.com>
Fri, 1 Sep 2017 11:07:03 +0000 (14:07 +0300)
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 <k.drabeniuk@samsung.com>
src/tbm_surface_queue.c

index f91d4ed..fb80c3d 100644 (file)
@@ -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;