Skip to content

Reference count

include/types/refcount.h View source View on GitHub
void refcount_init(refcount_t *rc, uint32_t val);
bool refcount_inc(refcount_t *rc);
bool refcount_inc_not_zero(refcount_t *rc);
uint32_t refcount_read(refcount_t *rc);
bool refcount_dec_and_test(refcount_t *rc);

REFCOUNT_GENERATE_GET_FOR_STRUCT_WITH_FAILURE_COND

Section titled “REFCOUNT_GENERATE_GET_FOR_STRUCT_WITH_FAILURE_COND”
#define REFCOUNT_GENERATE_GET_FOR_STRUCT_WITH_FAILURE_COND( \
    __struct, __refcount_member, __failure_member, __failure_state) \
    static inline bool __struct##_get(struct __struct *obj) { \
        uint32_t old; \
        while (true) { \
            old = atomic_load_explicit(&obj->__refcount_member, \
                                       memory_order_acquire); \
 \
            /* panic if refcount is zero (possible UAF) */
#define REFCOUNT_ASSERT_ZERO(rc) (kassert(atomic_load(&rc) == 0))