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