26RCSIDH(atomic_queue_h,
"$Id: 3a566defb63f15aa51287e250b83ac3320ddca85 $")
29#ifdef HAVE_STDATOMIC_H
32# include <freeradius-devel/util/stdatomic.h>
34#include <freeradius-devel/util/talloc.h>
size_t size
The length of the queue.
size_t seg_size
Capacity of each segment.
Structure to hold the atomic queue.
bool fr_atomic_queue_pop(fr_atomic_queue_t *aq, void **p_data)
Pop a pointer from the atomic queue.
void fr_atomic_queue_debug(FILE *fp, fr_atomic_queue_t *aq)
Dump an atomic queue.
bool fr_atomic_ring_push(fr_atomic_ring_t *ring, void *data)
Push a pointer into the ring; allocate a new segment on overflow.
fr_atomic_queue_t * fr_atomic_queue_malloc(size_t size)
Create fixed-size atomic queue outside any talloc hierarchy.
fr_atomic_ring_t * fr_atomic_ring_alloc(TALLOC_CTX *ctx, size_t seg_size)
Allocate an empty SPSC ring.
bool fr_atomic_ring_pop(fr_atomic_ring_t *ring, void **p_data)
Pop a pointer from the ring, advancing past drained segments.
void fr_atomic_ring_free(fr_atomic_ring_t **ring)
Free the ring and all remaining segments.
size_t fr_atomic_queue_size(fr_atomic_queue_t *aq)
bool fr_atomic_queue_push(fr_atomic_queue_t *aq, void *data)
Push a pointer into the atomic queue.
void fr_atomic_queue_free(fr_atomic_queue_t **aq)
Free an atomic queue if it's not freed by ctx.
fr_atomic_queue_t * fr_atomic_queue_talloc(TALLOC_CTX *ctx, size_t size)
Create fixed-size atomic queue.
static fr_atomic_queue_t ** aq