tbm_surface_queue: called need_attach when queue_dequeue 79/134579/5
authorChangyeon Lee <cyeon.lee@samsung.com>
Mon, 19 Jun 2017 07:28:10 +0000 (16:28 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Tue, 18 Jul 2017 05:12:39 +0000 (14:12 +0900)
Change-Id: I32540fd30baff0fb4ac0fef4f81a95bb8a906904

src/tbm_surface_queue.c

index 3a04541..1dadcb0 100644 (file)
@@ -567,16 +567,6 @@ _tbm_surface_queue_dequeue(tbm_surface_queue_h surface_queue)
 {
        queue_node *node;
 
-       if (_queue_is_empty(&surface_queue->free_queue)) {
-               if (surface_queue->impl && surface_queue->impl->need_attach)
-                       surface_queue->impl->need_attach(surface_queue);
-
-               if (_queue_is_empty(&surface_queue->free_queue)) {
-                       TBM_LOG_E("surface_queue->free_queue is empty.\n");
-                       return NULL;
-               }
-       }
-
        node = _queue_node_pop_front(&surface_queue->free_queue);
 
        return node;
@@ -1146,6 +1136,18 @@ tbm_surface_queue_dequeue(tbm_surface_queue_h
 
        pthread_mutex_lock(&surface_queue->lock);
 
+       if (_queue_is_empty(&surface_queue->free_queue)) {
+               if (surface_queue->impl && surface_queue->impl->need_attach)
+                       surface_queue->impl->need_attach(surface_queue);
+
+               if (!_tbm_surface_queue_is_valid(surface_queue)) {
+                       TBM_LOG_E("surface_queue:%p is invalid", surface_queue);
+                       pthread_mutex_unlock(&surface_queue->lock);
+                       _tbm_surf_queue_mutex_unlock();
+                       return TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
+               }
+       }
+
        if (surface_queue->impl && surface_queue->impl->dequeue)
                node = surface_queue->impl->dequeue(surface_queue);
        else