On Sat, 28 Mar 2015 01:53:28 +0800
Lin Ma <l...@suse.com> wrote:
>
> 在 2015年03月28日 01:20, Igor Mammedov 写道:
> > 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);
> That makes sense.
>
> But If so, Does prototype of user_creatable_complete need to be changed
> as well by a new patch?
Yep, make it a separate patch though.