X-Git-Url: http://git.meshlink.io/?p=meshlink;a=blobdiff_plain;f=src%2Fmeshlink_queue.h;h=fc751a8fdd4abbdb2cf55c1fc2ff023468023350;hp=a713f93f24a0b2b36ed66dea5ad48f4653dce371;hb=b67296418c51784d39a24c3041e2cb199bee06f2;hpb=f79cc0e0bba16a3aa42a5fa13098cda714623205 diff --git a/src/meshlink_queue.h b/src/meshlink_queue.h index a713f93f..fc751a8f 100644 --- a/src/meshlink_queue.h +++ b/src/meshlink_queue.h @@ -38,15 +38,21 @@ typedef struct meshlink_queue_item { static inline bool meshlink_queue_push(meshlink_queue_t *queue, void *data) { meshlink_queue_item_t *item = malloc(sizeof(*item)); - if(!item) + + if(!item) { return false; + } + item->data = data; item->next = NULL; pthread_mutex_lock(&queue->mutex); - if(!queue->tail) + + if(!queue->tail) { queue->head = queue->tail = item; - else + } else { queue->tail = queue->tail->next = item; + } + pthread_mutex_unlock(&queue->mutex); return true; } @@ -55,11 +61,15 @@ static inline void *meshlink_queue_pop(meshlink_queue_t *queue) { meshlink_queue_item_t *item; void *data; pthread_mutex_lock(&queue->mutex); + if((item = queue->head)) { queue->head = item->next; - if(!queue->head) + + if(!queue->head) { queue->tail = NULL; + } } + pthread_mutex_unlock(&queue->mutex); data = item ? item->data : NULL; free(item);