On Sat, 28 Mar 2015 00:55:29 +0800 Lin Ma <l...@suse.com> wrote: > If backends implement the can_be_deleted and it returns false, > Then the qmp_object_del won't delete the given backends. > > Signed-off-by: Lin Ma <l...@suse.com> > --- > include/qom/object_interfaces.h | 14 ++++++++++++++ > qmp.c | 5 +++++ > qom/object_interfaces.c | 14 ++++++++++++++ > 3 files changed, 33 insertions(+) > > diff --git a/include/qom/object_interfaces.h b/include/qom/object_interfaces.h > index b792283..012b653 100644 > --- a/include/qom/object_interfaces.h > +++ b/include/qom/object_interfaces.h > @@ -25,6 +25,8 @@ typedef struct UserCreatable { > * UserCreatableClass: > * @parent_class: the base class > * @complete: callback to be called after @obj's properties are set. > + * @can_be_deleted: callback to be called before an object is removed > + * to check if @obj can be removed safely. > * > * Interface is designed to work with -object/object-add/object_add > * commands. > @@ -47,6 +49,7 @@ typedef struct UserCreatableClass { > > /* <public> */ > void (*complete)(UserCreatable *uc, Error **errp); > + bool (*can_be_deleted)(UserCreatable *uc, Error **errp); > } UserCreatableClass; > > /** > @@ -59,4 +62,15 @@ typedef struct UserCreatableClass { > * nothing. > */ > void user_creatable_complete(Object *obj, Error **errp); > + > +/** > + * user_creatable_can_be_deleted: > + * @obj: the object whose can_be_deleted() method is called if defined s/obj/uc/ s/defined/implemented/
> + * @errp: if an error occurs, a pointer to an area to store the error > + * > + * Wrapper to call can_be_deleted() method if one of types it's inherited > + * from implements USER_CREATABLE interface, otherwise the call does > + * nothing. drop ", otherwise the call does nothing" > +bool user_creatable_can_be_deleted(Object *obj, Error **errp); [...] > > +bool user_creatable_can_be_deleted(Object *obj, Error **errp) > +{ > + > + UserCreatableClass *ucc; > + UserCreatable *uc = USER_CREATABLE(obj); Function description doesn't match what it does, I mean part "otherwise the call does nothing." How about changing prototype to: bool user_creatable_can_be_deleted(UserCreatable *uc, Error **errp) and calling it in qmp.c like: user_creatable_can_be_deleted(USER_CREATABLE(obj), errp);