surface_queue: add _tbm_set_last_result() 93/177193/1
authorSooChan Lim <sc1.lim@samsung.com>
Wed, 25 Apr 2018 07:18:46 +0000 (16:18 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Thu, 26 Apr 2018 04:03:55 +0000 (13:03 +0900)
Change-Id: I9ec3638b38405f081f1988b72fac2526e00e234c

src/tbm_surface_queue.c

index 0896edc..1d8cc99 100644 (file)
@@ -46,6 +46,7 @@ void _tbm_surface_queue_mutex_unlock(void);
 #define TBM_SURF_QUEUE_RETURN_IF_FAIL(cond) {\
        if (!(cond)) {\
                TBM_ERR("'%s' failed.\n", #cond);\
+               _tbm_set_last_result(TBM_ERROR_INVALID_PARAMETER);\
                _tbm_surf_queue_mutex_unlock();\
                return;\
        } \
@@ -54,6 +55,7 @@ void _tbm_surface_queue_mutex_unlock(void);
 #define TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(cond, val) {\
        if (!(cond)) {\
                TBM_ERR("'%s' failed.\n", #cond);\
+               _tbm_set_last_result(TBM_ERROR_INVALID_PARAMETER);\
                _tbm_surf_queue_mutex_unlock();\
                return val;\
        } \
@@ -631,6 +633,7 @@ tbm_surface_queue_add_destroy_cb(
        void *data)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -656,6 +659,7 @@ tbm_surface_queue_remove_destroy_cb(
        void *data)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -679,6 +683,7 @@ tbm_surface_queue_add_dequeuable_cb(
        void *data)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -704,6 +709,7 @@ tbm_surface_queue_remove_dequeuable_cb(
        void *data)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -727,6 +733,7 @@ tbm_surface_queue_add_dequeue_cb(
        void *data)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -752,6 +759,7 @@ tbm_surface_queue_remove_dequeue_cb(
        void *data)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -775,6 +783,7 @@ tbm_surface_queue_add_can_dequeue_cb(
        void *data)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -800,6 +809,7 @@ tbm_surface_queue_remove_can_dequeue_cb(
        void *data)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -823,6 +833,7 @@ tbm_surface_queue_add_acquirable_cb(
        void *data)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -848,6 +859,7 @@ tbm_surface_queue_remove_acquirable_cb(
        void *data)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -871,6 +883,7 @@ tbm_surface_queue_add_trace_cb(
        void *data)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -896,6 +909,7 @@ tbm_surface_queue_remove_trace_cb(
        void *data)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -921,6 +935,7 @@ tbm_surface_queue_set_alloc_cb(
        void *data)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -946,6 +961,7 @@ tbm_surface_queue_get_width(tbm_surface_queue_h surface_queue)
        int width;
 
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue), 0);
 
@@ -964,6 +980,7 @@ tbm_surface_queue_get_height(tbm_surface_queue_h surface_queue)
        int height;
 
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue), 0);
 
@@ -982,6 +999,7 @@ tbm_surface_queue_get_format(tbm_surface_queue_h surface_queue)
        int format;
 
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue), 0);
 
@@ -1000,6 +1018,7 @@ tbm_surface_queue_get_size(tbm_surface_queue_h surface_queue)
        int queue_size;
 
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue), 0);
 
@@ -1018,6 +1037,7 @@ tbm_surface_queue_add_reset_cb(
        void *data)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -1043,6 +1063,7 @@ tbm_surface_queue_remove_reset_cb(
        void *data)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -1068,6 +1089,7 @@ tbm_surface_queue_enqueue(tbm_surface_queue_h
        int queue_type;
 
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -1089,10 +1111,13 @@ tbm_surface_queue_enqueue(tbm_surface_queue_h
 
                _tbm_surf_queue_mutex_unlock();
 
-               if (!node)
+               if (!node) {
+                       _tbm_set_last_result(TBM_SURFACE_QUEUE_ERROR_UNKNOWN_SURFACE);
                        return TBM_SURFACE_QUEUE_ERROR_UNKNOWN_SURFACE;
-               else
+               } else {
+                       _tbm_set_last_result(TBM_SURFACE_QUEUE_ERROR_ALREADY_EXIST);
                        return TBM_SURFACE_QUEUE_ERROR_ALREADY_EXIST;
+               }
        }
 
        if (surface_queue->impl && surface_queue->impl->enqueue)
@@ -1102,6 +1127,7 @@ tbm_surface_queue_enqueue(tbm_surface_queue_h
 
        if (!_queue_get_node(surface_queue, DIRTY_QUEUE, surface, NULL)) {
                TBM_ERR("enqueue surface(%p) but surface isn't present in the dirty_queue\n", surface);
+               _tbm_set_last_result(TBM_SURFACE_ERROR_INVALID_OPERATION);
                pthread_mutex_unlock(&surface_queue->lock);
 
                _tbm_surf_queue_mutex_unlock();
@@ -1141,6 +1167,7 @@ tbm_surface_queue_cancel_dequeue(tbm_surface_queue_h
        int queue_type;
 
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -1155,6 +1182,7 @@ tbm_surface_queue_cancel_dequeue(tbm_surface_queue_h
        if (node == NULL || queue_type != NODE_LIST) {
                TBM_ERR("tbm_surface_queue_cancel_dequeue::Surface is existed in free_queue or dirty_queue node:%p, type:%d\n",
                        node, queue_type);
+               _tbm_set_last_result(TBM_SURFACE_QUEUE_ERROR_INVALID_SURFACE);
                pthread_mutex_unlock(&surface_queue->lock);
 
                _tbm_surf_queue_mutex_unlock();
@@ -1198,9 +1226,10 @@ tbm_surface_queue_cancel_dequeue(tbm_surface_queue_h
                _tbm_surface_queue_release(surface_queue, node, 1);
 
        if (_queue_is_empty(&surface_queue->free_queue)) {
+               TBM_ERR("surface_queue->free_queue is empty.\n");
+               _tbm_set_last_result(TBM_SURFACE_QUEUE_ERROR_INVALID_SURFACE);
                pthread_mutex_unlock(&surface_queue->lock);
 
-               TBM_ERR("surface_queue->free_queue is empty.\n");
                _tbm_surf_queue_mutex_unlock();
                return TBM_SURFACE_QUEUE_ERROR_INVALID_SURFACE;
        }
@@ -1224,6 +1253,7 @@ tbm_surface_queue_dequeue(tbm_surface_queue_h
        queue_node *node;
 
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -1240,6 +1270,7 @@ tbm_surface_queue_dequeue(tbm_surface_queue_h
 
                if (!_tbm_surface_queue_is_valid(surface_queue)) {
                        TBM_ERR("surface_queue:%p is invalid", surface_queue);
+                       _tbm_set_last_result(TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
                        pthread_mutex_unlock(&surface_queue->lock);
                        _tbm_surf_queue_mutex_unlock();
                        return TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
@@ -1253,6 +1284,7 @@ tbm_surface_queue_dequeue(tbm_surface_queue_h
 
        if (node == NULL || node->surface == NULL) {
                TBM_ERR("_queue_node_pop_front failed\n");
+               _tbm_set_last_result(TBM_SURFACE_QUEUE_ERROR_EMPTY);
                pthread_mutex_unlock(&surface_queue->lock);
 
                _tbm_surf_queue_mutex_unlock();
@@ -1279,6 +1311,7 @@ int
 tbm_surface_queue_can_dequeue(tbm_surface_queue_h surface_queue, int wait)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue), 0);
 
@@ -1333,6 +1366,7 @@ tbm_surface_queue_release(tbm_surface_queue_h
        int queue_type;
 
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -1351,10 +1385,13 @@ tbm_surface_queue_release(tbm_surface_queue_h
 
                _tbm_surf_queue_mutex_unlock();
 
-               if (!node)
+               if (!node) {
+                       _tbm_set_last_result(TBM_SURFACE_QUEUE_ERROR_UNKNOWN_SURFACE);
                        return TBM_SURFACE_QUEUE_ERROR_UNKNOWN_SURFACE;
-               else
+               } else {
+                       _tbm_set_last_result(TBM_SURFACE_QUEUE_ERROR_ALREADY_EXIST);
                        return TBM_SURFACE_QUEUE_ERROR_ALREADY_EXIST;
+               }
        }
 
        if (node->delete_pending) {
@@ -1395,6 +1432,7 @@ tbm_surface_queue_release(tbm_surface_queue_h
 
        if (!_queue_get_node(surface_queue, FREE_QUEUE, surface, NULL)) {
                TBM_ERR("release surface(%p) but surface isn't present in the free_queue\n", surface);
+               _tbm_set_last_result(TBM_SURFACE_ERROR_INVALID_OPERATION);
                pthread_mutex_unlock(&surface_queue->lock);
 
                _tbm_surf_queue_mutex_unlock();
@@ -1423,6 +1461,7 @@ tbm_surface_queue_cancel_acquire(tbm_surface_queue_h
        int queue_type;
 
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -1437,6 +1476,7 @@ tbm_surface_queue_cancel_acquire(tbm_surface_queue_h
        if (node == NULL || queue_type != NODE_LIST) {
                TBM_ERR("tbm_surface_queue_cancel_acquire::Surface is existed in free_queue or dirty_queue node:%p, type:%d\n",
                        node, queue_type);
+               _tbm_set_last_result(TBM_SURFACE_QUEUE_ERROR_ALREADY_EXIST);
                pthread_mutex_unlock(&surface_queue->lock);
 
                _tbm_surf_queue_mutex_unlock();
@@ -1450,6 +1490,7 @@ tbm_surface_queue_cancel_acquire(tbm_surface_queue_h
 
        if (_queue_is_empty(&surface_queue->dirty_queue)) {
                TBM_ERR("enqueue surface but queue is empty node:%p\n", node);
+               _tbm_set_last_result(TBM_SURFACE_QUEUE_ERROR_UNKNOWN_SURFACE);
                pthread_mutex_unlock(&surface_queue->lock);
 
                _tbm_surf_queue_mutex_unlock();
@@ -1477,6 +1518,7 @@ tbm_surface_queue_acquire(tbm_surface_queue_h
        queue_node *node;
 
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        *surface = NULL;
 
@@ -1494,6 +1536,7 @@ tbm_surface_queue_acquire(tbm_surface_queue_h
 
        if (node == NULL || node->surface == NULL) {
                TBM_ERR("_queue_node_pop_front failed\n");
+               _tbm_set_last_result(TBM_SURFACE_QUEUE_ERROR_EMPTY);
                pthread_mutex_unlock(&surface_queue->lock);
 
                _tbm_surf_queue_mutex_unlock();
@@ -1535,6 +1578,7 @@ int
 tbm_surface_queue_can_acquire(tbm_surface_queue_h surface_queue, int wait)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue), 0);
 
@@ -1567,6 +1611,7 @@ tbm_surface_queue_destroy(tbm_surface_queue_h surface_queue)
        queue_node *node = NULL, *tmp;
 
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue));
 
@@ -1607,6 +1652,7 @@ tbm_surface_queue_reset(tbm_surface_queue_h
        queue_node *node = NULL, *tmp;
 
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -1662,6 +1708,7 @@ tbm_surface_queue_error_e
 tbm_surface_queue_notify_reset(tbm_surface_queue_h surface_queue)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -1677,6 +1724,7 @@ tbm_surface_queue_error_e
 tbm_surface_queue_notify_dequeuable(tbm_surface_queue_h surface_queue)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -1695,6 +1743,7 @@ tbm_surface_queue_set_size(tbm_surface_queue_h
        queue_node *node = NULL, *tmp;
 
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                                        TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -1777,6 +1826,7 @@ tbm_surface_queue_free_flush(tbm_surface_queue_h surface_queue)
        queue_node *node = NULL;
 
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -1813,6 +1863,7 @@ tbm_surface_queue_flush(tbm_surface_queue_h surface_queue)
        queue_node *node = NULL, *tmp;
 
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -1866,6 +1917,7 @@ tbm_surface_queue_get_surfaces(tbm_surface_queue_h surface_queue,
        queue_node *node = NULL;
 
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -1897,6 +1949,7 @@ tbm_surface_queue_get_trace_surface_num(
                        tbm_surface_queue_h surface_queue, tbm_surface_queue_trace trace, int *num)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -1993,16 +2046,22 @@ tbm_surface_queue_h
 tbm_surface_queue_create(int queue_size, int width,
                         int height, int format, int flags)
 {
-       TBM_RETURN_VAL_IF_FAIL(queue_size > 0, NULL);
-       TBM_RETURN_VAL_IF_FAIL(width > 0, NULL);
-       TBM_RETURN_VAL_IF_FAIL(height > 0, NULL);
-       TBM_RETURN_VAL_IF_FAIL(format > 0, NULL);
-
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
+
+       TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(queue_size > 0, NULL);
+       TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(width > 0, NULL);
+       TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(height > 0, NULL);
+       TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(format > 0, NULL);
 
        tbm_surface_queue_h surface_queue = (tbm_surface_queue_h) calloc(1,
                                            sizeof(struct _tbm_surface_queue));
-       TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(surface_queue != NULL, NULL);
+       if (!surface_queue) {
+               TBM_ERR("cannot allocate the surface_queue.\n");
+               _tbm_set_last_result(TBM_ERROR_OUT_OF_MEMORY);
+               _tbm_surf_queue_mutex_unlock();
+               return NULL;
+       }
 
        TBM_TRACE_SURFACE_QUEUE("tbm_surface_queue(%p)\n", surface_queue);
 
@@ -2010,6 +2069,7 @@ tbm_surface_queue_create(int queue_size, int width,
                                  sizeof(tbm_queue_default));
        if (data == NULL) {
                TBM_ERR("cannot allocate the tbm_queue_default.\n");
+               _tbm_set_last_result(TBM_ERROR_OUT_OF_MEMORY);
                free(surface_queue);
                _tbm_surf_queue_mutex_unlock();
                return NULL;
@@ -2153,16 +2213,22 @@ tbm_surface_queue_h
 tbm_surface_queue_sequence_create(int queue_size, int width,
                                  int height, int format, int flags)
 {
-       TBM_RETURN_VAL_IF_FAIL(queue_size > 0, NULL);
-       TBM_RETURN_VAL_IF_FAIL(width > 0, NULL);
-       TBM_RETURN_VAL_IF_FAIL(height > 0, NULL);
-       TBM_RETURN_VAL_IF_FAIL(format > 0, NULL);
-
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
+
+       TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(queue_size > 0, NULL);
+       TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(width > 0, NULL);
+       TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(height > 0, NULL);
+       TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(format > 0, NULL);
 
        tbm_surface_queue_h surface_queue = (tbm_surface_queue_h) calloc(1,
                                            sizeof(struct _tbm_surface_queue));
-       TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(surface_queue != NULL, NULL);
+       if (surface_queue == NULL) {
+               TBM_ERR("cannot allocate the surface_queue.\n");
+               _tbm_set_last_result(TBM_ERROR_OUT_OF_MEMORY);
+               _tbm_surf_queue_mutex_unlock();
+               return NULL;
+       }
 
        TBM_TRACE_SURFACE_QUEUE("tbm_surface_queue(%p)\n", surface_queue);
 
@@ -2170,6 +2236,7 @@ tbm_surface_queue_sequence_create(int queue_size, int width,
                                   sizeof(tbm_queue_sequence));
        if (data == NULL) {
                TBM_ERR("cannot allocate the tbm_queue_sequence.\n");
+               _tbm_set_last_result(TBM_ERROR_OUT_OF_MEMORY);
                free(surface_queue);
                _tbm_surf_queue_mutex_unlock();
                return NULL;
@@ -2191,6 +2258,7 @@ tbm_surface_queue_set_modes(tbm_surface_queue_h surface_queue,
                                  int modes)
 {
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                               TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
@@ -2216,6 +2284,7 @@ tbm_surface_queue_set_sync_count(tbm_surface_queue_h surface_queue,
        int dequeue_num, enqueue_num;
 
        _tbm_surf_queue_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
        TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
                                   TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);