From 6307f88728b8c6071aea5bcad12769607d65699a Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Wed, 25 Apr 2018 16:18:46 +0900 Subject: [PATCH] surface_queue: add _tbm_set_last_result() Change-Id: I9ec3638b38405f081f1988b72fac2526e00e234c --- src/tbm_surface_queue.c | 103 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 86 insertions(+), 17 deletions(-) diff --git a/src/tbm_surface_queue.c b/src/tbm_surface_queue.c index 0896edc..1d8cc99 100644 --- a/src/tbm_surface_queue.c +++ b/src/tbm_surface_queue.c @@ -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); -- 2.7.4