Lines Matching refs:queue

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