summaryrefslogtreecommitdiffstats
path: root/src/pulsecore/object.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2007-06-13 22:08:14 +0000
committerLennart Poettering <lennart@poettering.net>2007-06-13 22:08:14 +0000
commitbe4a8828360b3607414c3ebfd836494e6490267d (patch)
tree765c44df62326769c1356483f79f5d300ddab9b3 /src/pulsecore/object.c
parent69115687ad1604ddfa9fa7cd86eb286e6bb5ea9a (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.c16
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;
+}