diff --git a/cogl/cogl-object-private.h b/cogl/cogl-object-private.h index d33558986..d7c3412b5 100644 --- a/cogl/cogl-object-private.h +++ b/cogl/cogl-object-private.h @@ -53,6 +53,7 @@ typedef struct _CoglObjectClass { const char *name; void *virt_free; + void *virt_unref; } CoglObjectClass; #define COGL_OBJECT_N_PRE_ALLOCATED_USER_DATA_ENTRIES 2 @@ -167,6 +168,8 @@ _cogl_##type_name##_object_new (Cogl##TypeName *new_obj) \ \ obj->klass->virt_free = \ _cogl_object_##type_name##_indirect_free; \ + obj->klass->virt_unref = \ + _cogl_object_default_unref; \ obj->klass->name = "Cogl"#TypeName, \ \ g_hash_table_insert (_cogl_debug_instances, \ @@ -287,5 +290,8 @@ _cogl_object_set_user_data (CoglObject *object, void *user_data, CoglUserDataDestroyInternalCallback destroy); +void +_cogl_object_default_unref (void *obj); + #endif /* __COGL_OBJECT_PRIVATE_H */ diff --git a/cogl/cogl-object.c b/cogl/cogl-object.c index 7f06d8d29..4e0b4edf7 100644 --- a/cogl/cogl-object.c +++ b/cogl/cogl-object.c @@ -52,7 +52,7 @@ cogl_handle_ref (CoglHandle handle) } void -cogl_object_unref (void *object) +_cogl_object_default_unref (void *object) { CoglObject *obj = object; @@ -97,6 +97,13 @@ cogl_object_unref (void *object) } } +void +cogl_object_unref (void *obj) +{ + void (* unref_func) (void *) = ((CoglObject *) obj)->klass->virt_unref; + unref_func (obj); +} + void cogl_handle_unref (CoglHandle handle) {