+++ /dev/null
-#include "bits/callback.h" // for SingleCallback
-#include "refcount.h"
-
-void refcount_ini(Refcount *refcount, void *obj, void *del)
-{
- refcount->obj = obj;
- refcount->del = del;
- refcount->cnt = 1;
- pthread_mutex_init(&refcount->mtx, NULL);
-}
-
-void refcount_dst(Refcount *refcount)
-{
- pthread_mutex_destroy(&refcount->mtx);
-}
-
-void *refcount_inc(Refcount *refcount)
-{
- pthread_mutex_lock(&refcount->mtx);
- refcount->cnt++;
- pthread_mutex_unlock(&refcount->mtx);
- return refcount;
-}
-
-void *refcount_grb(Refcount *refcount)
-{
- return refcount_obj(refcount_inc(refcount));
-}
-
-void refcount_drp(Refcount *refcount)
-{
- pthread_mutex_lock(&refcount->mtx);
- unsigned short count = --refcount->cnt;
- pthread_mutex_unlock(&refcount->mtx);
-
- if (!count)
- ((SingleCallback) refcount->del)(refcount->obj);
-}
-
-void *refcount_obj(Refcount *refcount)
-{
- return refcount->obj;
-}