diff --git a/src/util/virobject.c b/src/util/virobject.c index f08c18ce442a82f8b133de796b79b17335785e84..3b28331ba780f25096f70c054a30afcc2f919467 100644 --- a/src/util/virobject.c +++ b/src/util/virobject.c @@ -147,10 +147,11 @@ virClassForObjectRWLockable(void) * * Register a new object class with @name. The @objectSize * should give the total size of the object struct, which - * is expected to have a 'virObject object;' field as its - * first member. When the last reference on the object is - * released, the @dispose callback will be invoked to free - * memory of the object fields + * is expected to have a 'virObject parent;' field as (or + * contained in) its first member. When the last reference + * on the object is released, the @dispose callback will be + * invoked to free memory of the local object fields, as + * well as the dispose callbacks of the parent classes. * * Returns a new class instance */ @@ -326,8 +327,9 @@ virObjectRWLockableDispose(void *anyobj) * @anyobj: any instance of virObjectPtr * * Decrement the reference count on @anyobj and if - * it hits zero, runs the "dispose" callback associated - * with the object class and frees @anyobj. + * it hits zero, runs the "dispose" callbacks associated + * with the object class and its parents before freeing + * @anyobj. * * Returns true if the remaining reference count is * non-zero, false if the object was disposed of diff --git a/src/util/virobject.h b/src/util/virobject.h index 56bc9f232459c02b899d601b28fb505123cf1f29..d4ec943a43d4f8033c95bce9483211281adc8808 100644 --- a/src/util/virobject.h +++ b/src/util/virobject.h @@ -75,6 +75,11 @@ virClassPtr virClassForObjectRWLockable(void); # define VIR_PARENT_REQUIRED ATTRIBUTE_NONNULL(1) # endif +/* Assign the class description nameClass to represent struct @name + * (which must have an object-based 'parent' member at offset 0), and + * with parent class @prnt. nameDispose must exist as either a + * function or as a macro defined to NULL. + */ # define VIR_CLASS_NEW(name, prnt) \ verify_expr(offsetof(name, parent) == 0, \ (name##Class = virClassNew(prnt, #name, sizeof(name), name##Dispose)))