15 #ifndef _GCS_FIFO_LITE_H_
16 #define _GCS_FIFO_LITE_H_
24 #include <galerautils.h>
51 gcs_fifo_lite_t* gcs_fifo_lite_create (
size_t length,
size_t item_size);
59 return ((
char*)f->queue + f->tail * f->item_size);
65 return ((
char*)f->queue + f->head * f->item_size);
68 #define GCS_FIFO_LITE_LOCK \
69 if (gu_unlikely (gu_mutex_lock (&fifo->lock))) { \
70 gu_fatal ("Mutex lock failed."); \
83 while (!fifo->closed && fifo->used >= fifo->length) {
85 gu_cond_wait (&fifo->put_cond, &fifo->lock);
88 if (gu_likely(!fifo->closed)) {
89 assert (fifo->used < fifo->length);
90 ret = _gcs_fifo_lite_tail (fifo);
93 gu_mutex_unlock (&fifo->lock);
103 fifo->tail = (fifo->tail + 1) & fifo->mask;
106 assert (fifo->used <= fifo->length);
108 if (fifo->get_wait > 0) {
110 gu_cond_signal (&fifo->get_cond);
113 gu_mutex_unlock (&fifo->lock);
132 if (gu_likely(fifo->used > 0)) {
133 ret = _gcs_fifo_lite_head (fifo);
136 gu_mutex_unlock (&fifo->lock);
146 fifo->head = (fifo->head + 1) & fifo->mask;
149 assert (fifo->used != -1);
151 if (fifo->put_wait > 0) {
153 gu_cond_signal (&fifo->put_cond);
156 gu_mutex_unlock (&fifo->lock);
163 return (gu_mutex_unlock (&fifo->lock));
176 fifo->tail = (fifo->tail - 1) & fifo->mask;
180 if (fifo->put_wait > 0) {
182 gu_cond_signal (&fifo->put_cond);
186 gu_mutex_unlock (&fifo->lock);
194 return (fifo->used < fifo->length);
Definition: gcs_fifo_lite.h:28