Lines Matching full:queue
69 void fixed_queue_free(fixed_queue_t *queue, fixed_queue_free_cb free_cb) { in fixed_queue_free() argument
70 if (!queue) in fixed_queue_free()
74 …for (const list_node_t *node = list_begin(queue->list); node != list_end(queue->list); node = list… in fixed_queue_free()
77 list_free(queue->list); in fixed_queue_free()
78 semaphore_free(queue->enqueue_sem); in fixed_queue_free()
79 semaphore_free(queue->dequeue_sem); in fixed_queue_free()
80 pthread_mutex_destroy(&queue->lock); in fixed_queue_free()
81 free(queue); in fixed_queue_free()
84 void fixed_queue_enqueue(fixed_queue_t *queue, void *data) { in fixed_queue_enqueue() argument
85 assert(queue != NULL); in fixed_queue_enqueue()
88 semaphore_wait(queue->enqueue_sem); in fixed_queue_enqueue()
90 pthread_mutex_lock(&queue->lock); in fixed_queue_enqueue()
91 list_append(queue->list, data); in fixed_queue_enqueue()
92 pthread_mutex_unlock(&queue->lock); in fixed_queue_enqueue()
94 semaphore_post(queue->dequeue_sem); in fixed_queue_enqueue()
97 void *fixed_queue_dequeue(fixed_queue_t *queue) { in fixed_queue_dequeue() argument
98 assert(queue != NULL); in fixed_queue_dequeue()
100 semaphore_wait(queue->dequeue_sem); in fixed_queue_dequeue()
102 pthread_mutex_lock(&queue->lock); in fixed_queue_dequeue()
103 void *ret = list_front(queue->list); in fixed_queue_dequeue()
104 list_remove(queue->list, ret); in fixed_queue_dequeue()
105 pthread_mutex_unlock(&queue->lock); in fixed_queue_dequeue()
107 semaphore_post(queue->enqueue_sem); in fixed_queue_dequeue()
112 bool fixed_queue_try_enqueue(fixed_queue_t *queue, void *data) { in fixed_queue_try_enqueue() argument
113 assert(queue != NULL); in fixed_queue_try_enqueue()
116 if (!semaphore_try_wait(queue->enqueue_sem)) in fixed_queue_try_enqueue()
119 pthread_mutex_lock(&queue->lock); in fixed_queue_try_enqueue()
120 list_append(queue->list, data); in fixed_queue_try_enqueue()
121 pthread_mutex_unlock(&queue->lock); in fixed_queue_try_enqueue()
123 semaphore_post(queue->dequeue_sem); in fixed_queue_try_enqueue()
127 void *fixed_queue_try_dequeue(fixed_queue_t *queue) { in fixed_queue_try_dequeue() argument
128 assert(queue != NULL); in fixed_queue_try_dequeue()
130 if (!semaphore_try_wait(queue->dequeue_sem)) in fixed_queue_try_dequeue()
133 pthread_mutex_lock(&queue->lock); in fixed_queue_try_dequeue()
134 void *ret = list_front(queue->list); in fixed_queue_try_dequeue()
135 list_remove(queue->list, ret); in fixed_queue_try_dequeue()
136 pthread_mutex_unlock(&queue->lock); in fixed_queue_try_dequeue()
138 semaphore_post(queue->enqueue_sem); in fixed_queue_try_dequeue()
143 int fixed_queue_get_dequeue_fd(const fixed_queue_t *queue) { in fixed_queue_get_dequeue_fd() argument
144 assert(queue != NULL); in fixed_queue_get_dequeue_fd()
145 return semaphore_get_fd(queue->dequeue_sem); in fixed_queue_get_dequeue_fd()
148 int fixed_queue_get_enqueue_fd(const fixed_queue_t *queue) { in fixed_queue_get_enqueue_fd() argument
149 assert(queue != NULL); in fixed_queue_get_enqueue_fd()
150 return semaphore_get_fd(queue->enqueue_sem); in fixed_queue_get_enqueue_fd()