X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fconnectivity%2Fcommon%2Fsrc%2Fuqueue.c;h=312423482b2a773018e1f801c7b81e07129ea030;hb=8229635f6d207516ccbbdf23b13be164e0fc1787;hp=395e07ff4336a493e4e82a6eb5357680ccb51430;hpb=b029953884356f976a4bdf560a6693bc6bcc115a;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/connectivity/common/src/uqueue.c b/resource/csdk/connectivity/common/src/uqueue.c index 395e07f..3124234 100644 --- a/resource/csdk/connectivity/common/src/uqueue.c +++ b/resource/csdk/connectivity/common/src/uqueue.c @@ -119,7 +119,7 @@ u_queue_message_t *u_queue_get_element(u_queue_t *queue) if (NULL == queue) { - OIC_LOG(DEBUG, TAG, "QueueAddElement FAIL, Invalid Queue"); + OIC_LOG(DEBUG, TAG, "QueueGetElement FAIL, Invalid Queue"); return NULL; } @@ -130,7 +130,7 @@ u_queue_message_t *u_queue_get_element(u_queue_t *queue) return NULL; } - queue->element = element->next;; + queue->element = element->next; queue->count--; message = element->message; @@ -245,3 +245,58 @@ u_queue_message_t *u_queue_get_head(u_queue_t *queue) return queue->element->message; } +CAResult_t u_queue_remove_req_elements(u_queue_t *queue, + QueueContextDataDestroy callback, void *ctx, + QueueDataDestroyFunction destroy) +{ + if (NULL == queue) + { + OIC_LOG(DEBUG, TAG, "QueueRemoveReqElement FAIL, Invalid Queue"); + return CA_STATUS_FAILED; + } + + if (NULL == callback) + { + OIC_LOG(DEBUG, TAG, "QueueRemoveReqElement FAIL, NULL callback"); + return CA_STATUS_FAILED; + } + + u_queue_element *cur = queue->element; + u_queue_element *prev = NULL; + u_queue_element *remove = NULL; + + while (NULL != cur) + { + if (cur->message && callback(cur->message->msg, cur->message->size, ctx)) + { + remove = cur; + if (NULL != prev) + { + prev->next = cur->next; + } + else + { + queue->element = cur->next; + } + cur = cur->next; + if (NULL != destroy) + { + destroy(remove->message->msg, remove->message->size); + } + else + { + OICFree(remove->message->msg); + } + OICFree(remove->message); + OICFree(remove); + queue->count--; + } + else + { + prev = cur; + cur = cur->next; + } + } + return CA_STATUS_OK; +} +