diff options
author | Lennart Poettering <lennart@poettering.net> | 2007-06-13 22:08:14 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2007-06-13 22:08:14 +0000 |
commit | be4a8828360b3607414c3ebfd836494e6490267d (patch) | |
tree | 765c44df62326769c1356483f79f5d300ddab9b3 /src/pulsecore/object.c | |
parent | 69115687ad1604ddfa9fa7cd86eb286e6bb5ea9a (diff) |
A lot of more work to get the lock-free stuff in place
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1474 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'src/pulsecore/object.c')
-rw-r--r-- | src/pulsecore/object.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/pulsecore/object.c b/src/pulsecore/object.c index e6ed53b2..a983c5ae 100644 --- a/src/pulsecore/object.c +++ b/src/pulsecore/object.c @@ -28,7 +28,7 @@ #include "object.h" -pa_object *pa_object_new_internal(size_t size, const char *type_name) { +pa_object *pa_object_new_internal(size_t size, const char *type_name, int (*check_type)(pa_object *o, const char *type_name)) { pa_object *o; pa_assert(size > sizeof(pa_object)); @@ -38,24 +38,30 @@ pa_object *pa_object_new_internal(size_t size, const char *type_name) { PA_REFCNT_INIT(o); o->type_name = type_name; o->free = pa_object_free; + o->check_type = check_type ? check_type : pa_object_check_type; return o; } pa_object *pa_object_ref(pa_object *o) { - pa_assert(o); - pa_assert(PA_REFCNT_VALUE(o) >= 1); + pa_object_assert_ref(o); PA_REFCNT_INC(o); return o; } void pa_object_unref(pa_object *o) { - pa_assert(o); - pa_assert(PA_REFCNT_VALUE(o) >= 1); + pa_object_assert_ref(o); if (PA_REFCNT_DEC(o) <= 0) { pa_assert(o->free); o->free(o); } } + +int pa_object_check_type(pa_object *o, const char *type_name) { + pa_assert(o); + pa_assert(type_name); + + return type_name == "pa_object" || strcmp(type_name, "pa_object") == 0; +} |