32#define PKRSRV_REF_COUNTED_INIT(obj, free_f) \
33 pkrsrv_ref_counted_init(&(obj->ref_counted), (pkrsrv_ref_free_f_t) free_f);
41#define PKRSRV_REF_COUNTED_USE(obj) \
42 PKRSRV_UTIL_ASSERT(obj); \
44 pkrsrv_util_verbose("Referencing: %s\n", #obj); \
46 pkrsrv_ref_counted_use(&(obj->ref_counted)); \
55#define PKRSRV_REF_COUNTED_LEAVE(obj) \
56 PKRSRV_UTIL_ASSERT(obj); \
59 __typeof__(obj) derefing = obj; \
60 pkrsrv_util_verbose("Dereferencing: %s\n", #obj); \
61 pkrsrv_ref_counted_leave((void **) (&(derefing)), &(derefing->ref_counted)); \
70#define PKRSRV_REF_COUNTEDIFY() \
71 pkrsrv_ref_counted_t ref_counted;
72#define PKRSRV_REF_BY(name) name##_ref
73#define PKRSRV_REF(type, name) \
75 pkrsrv_ref_t* PKRSRV_REF_BY(name);
76#define PKRSRV_REF_NEW(path, expr) \
78 PKRSRV_REF_BY(path) = pkrsrv_ref_new((void *) path, &(path->ref_counted));
79#define PKRSRV_REF_ASSIGN(var, val) \
80 pkrsrv_ref_assign(&(PKRSRV_REF_BY(var)), &(PKRSRV_REF_BY(val))); \
82#define PKRSRV_REF_SET(ref, obj) \
84 pkrsrv_ref_set(PKRSRV_REF_BY(ref), (void *) (ref));
85#define PKRSRV_REF_USE(name) pkrsrv_ref_use(PKRSRV_REF_BY(name));
86#define PKRSRV_REF_LEAVE(name) pkrsrv_ref_leave(&(PKRSRV_REF_BY(name)));
87#define PKRSRV_REF_ARG(type, name) type name, pkrsrv_ref_t* name##_ref
88#define PKRSRV_REF_PASS(name) pkrsrv_ref_new((void *) name, &(name->ref_counted));
int count
Definition ref.h:98
pkrsrv_ref_free_f_t free_f
Definition ref.h:99
pthread_mutex_t mutex
Definition ref.h:100
void pkrsrv_ref_counted_init(pkrsrv_ref_counted_t *ref_counted, pkrsrv_ref_free_f_t free_f)
Initializes a reference-counted object. Should be called in the constructor of the object after the d...
void pkrsrv_ref_counted_leave(void **obj_vp, pkrsrv_ref_counted_t *ref_counted)
Decrements the reference count of a reference-counted object.
void pkrsrv_ref_counted_use(pkrsrv_ref_counted_t *ref_counted)
Increments the reference count of a reference-counted object.
Reference-counted object structure.
Definition ref.h:97
void pkrsrv_ref_set(pkrsrv_ref_t *ref, void *obj)
pkrsrv_ref_t * pkrsrv_ref_new(void *obj, pkrsrv_ref_counted_t *ref_counted)
void pkrsrv_ref_use(pkrsrv_ref_t *ref)
void pkrsrv_ref_assign(pkrsrv_ref_t **dst, pkrsrv_ref_t **src)
void pkrsrv_ref_free(pkrsrv_ref_t *ref)
void * obj
Definition ref.h:105
int count
Definition ref.h:104
void(* pkrsrv_ref_free_f_t)(void *)
Definition ref.h:23
void pkrsrv_ref_leave(pkrsrv_ref_t **ref)
pkrsrv_ref_counted_t * ref_counted
Definition ref.h:106