Lines Matching refs:queue
71 void fixed_queue_free(fixed_queue_t *queue, fixed_queue_free_cb free_cb) in fixed_queue_free() argument
75 if (queue == NULL) { in fixed_queue_free()
79 fixed_queue_unregister_dequeue(queue); in fixed_queue_free()
82 … for (node = list_begin(queue->list); node != list_end(queue->list); node = list_next(node)) { in fixed_queue_free()
87 list_free(queue->list); in fixed_queue_free()
88 osi_sem_free(&queue->enqueue_sem); in fixed_queue_free()
89 osi_sem_free(&queue->dequeue_sem); in fixed_queue_free()
90 osi_mutex_free(&queue->lock); in fixed_queue_free()
91 osi_free(queue); in fixed_queue_free()
94 bool fixed_queue_is_empty(fixed_queue_t *queue) in fixed_queue_is_empty() argument
98 if (queue == NULL) { in fixed_queue_is_empty()
102 osi_mutex_lock(&queue->lock, OSI_MUTEX_MAX_TIMEOUT); in fixed_queue_is_empty()
103 is_empty = list_is_empty(queue->list); in fixed_queue_is_empty()
104 osi_mutex_unlock(&queue->lock); in fixed_queue_is_empty()
109 size_t fixed_queue_length(fixed_queue_t *queue) in fixed_queue_length() argument
113 if (queue == NULL) { in fixed_queue_length()
117 osi_mutex_lock(&queue->lock, OSI_MUTEX_MAX_TIMEOUT); in fixed_queue_length()
118 length = list_length(queue->list); in fixed_queue_length()
119 osi_mutex_unlock(&queue->lock); in fixed_queue_length()
123 size_t fixed_queue_capacity(fixed_queue_t *queue) in fixed_queue_capacity() argument
125 assert(queue != NULL); in fixed_queue_capacity()
127 return queue->capacity; in fixed_queue_capacity()
130 bool fixed_queue_enqueue(fixed_queue_t *queue, void *data, uint32_t timeout) in fixed_queue_enqueue() argument
134 assert(queue != NULL); in fixed_queue_enqueue()
137 if (osi_sem_take(&queue->enqueue_sem, timeout) != 0) { in fixed_queue_enqueue()
141 osi_mutex_lock(&queue->lock, OSI_MUTEX_MAX_TIMEOUT); in fixed_queue_enqueue()
142 status = list_append(queue->list, data); //Check whether enqueued success in fixed_queue_enqueue()
143 osi_mutex_unlock(&queue->lock); in fixed_queue_enqueue()
146 osi_sem_give(&queue->dequeue_sem); in fixed_queue_enqueue()
151 void *fixed_queue_dequeue(fixed_queue_t *queue, uint32_t timeout) in fixed_queue_dequeue() argument
155 assert(queue != NULL); in fixed_queue_dequeue()
157 if (osi_sem_take(&queue->dequeue_sem, timeout) != 0) { in fixed_queue_dequeue()
161 osi_mutex_lock(&queue->lock, OSI_MUTEX_MAX_TIMEOUT); in fixed_queue_dequeue()
162 ret = list_front(queue->list); in fixed_queue_dequeue()
163 list_remove(queue->list, ret); in fixed_queue_dequeue()
164 osi_mutex_unlock(&queue->lock); in fixed_queue_dequeue()
166 osi_sem_give(&queue->enqueue_sem); in fixed_queue_dequeue()
171 void *fixed_queue_try_peek_first(fixed_queue_t *queue) in fixed_queue_try_peek_first() argument
175 if (queue == NULL) { in fixed_queue_try_peek_first()
179 osi_mutex_lock(&queue->lock, OSI_MUTEX_MAX_TIMEOUT); in fixed_queue_try_peek_first()
180 ret = list_is_empty(queue->list) ? NULL : list_front(queue->list); in fixed_queue_try_peek_first()
181 osi_mutex_unlock(&queue->lock); in fixed_queue_try_peek_first()
186 void *fixed_queue_try_peek_last(fixed_queue_t *queue) in fixed_queue_try_peek_last() argument
190 if (queue == NULL) { in fixed_queue_try_peek_last()
194 osi_mutex_lock(&queue->lock, OSI_MUTEX_MAX_TIMEOUT); in fixed_queue_try_peek_last()
195 ret = list_is_empty(queue->list) ? NULL : list_back(queue->list); in fixed_queue_try_peek_last()
196 osi_mutex_unlock(&queue->lock); in fixed_queue_try_peek_last()
201 void *fixed_queue_try_remove_from_queue(fixed_queue_t *queue, void *data) in fixed_queue_try_remove_from_queue() argument
205 if (queue == NULL) { in fixed_queue_try_remove_from_queue()
209 osi_mutex_lock(&queue->lock, OSI_MUTEX_MAX_TIMEOUT); in fixed_queue_try_remove_from_queue()
210 if (list_contains(queue->list, data) && in fixed_queue_try_remove_from_queue()
211 osi_sem_take(&queue->dequeue_sem, 0) == 0) { in fixed_queue_try_remove_from_queue()
212 removed = list_remove(queue->list, data); in fixed_queue_try_remove_from_queue()
215 osi_mutex_unlock(&queue->lock); in fixed_queue_try_remove_from_queue()
218 osi_sem_give(&queue->enqueue_sem); in fixed_queue_try_remove_from_queue()
225 list_t *fixed_queue_get_list(fixed_queue_t *queue) in fixed_queue_get_list() argument
227 assert(queue != NULL); in fixed_queue_get_list()
231 return queue->list; in fixed_queue_get_list()
234 void fixed_queue_register_dequeue(fixed_queue_t *queue, fixed_queue_cb ready_cb) in fixed_queue_register_dequeue() argument
236 assert(queue != NULL); in fixed_queue_register_dequeue()
239 queue->dequeue_ready = ready_cb; in fixed_queue_register_dequeue()
242 void fixed_queue_unregister_dequeue(fixed_queue_t *queue) in fixed_queue_unregister_dequeue() argument
244 assert(queue != NULL); in fixed_queue_unregister_dequeue()
246 queue->dequeue_ready = NULL; in fixed_queue_unregister_dequeue()
249 void fixed_queue_process(fixed_queue_t *queue) in fixed_queue_process() argument
251 assert(queue != NULL); in fixed_queue_process()
253 if (queue->dequeue_ready) { in fixed_queue_process()
254 queue->dequeue_ready(queue); in fixed_queue_process()