From: Paolo Bonzini <pbonzini@redhat.com>
To: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
Cc: "qemu-devel@nongnu.org Developers" <qemu-devel@nongnu.org>,
"Andreas Färber" <afaerber@suse.de>
Subject: Re: [Qemu-devel] [RFC PATCH 03/13] qom: move unparenting to the child property's release callback
Date: Wed, 11 Jun 2014 16:01:23 +0200 [thread overview]
Message-ID: <53986133.1070904@redhat.com> (raw)
In-Reply-To: <CAEgOgz6BFS1YvYd49y=jORWru5A=7bCbLcGwwBFqVPpY1QZTYQ@mail.gmail.com>
Il 11/06/2014 15:35, Peter Crosthwaite ha scritto:
> On Wed, Jun 11, 2014 at 10:19 PM, Paolo Bonzini <pbonzini@redhat.com> wrote:
>> This ensures that the unparent callback is called automatically
>> when the parent object is finalized.
>>
>> Note that there's no need to keep a reference neither in
>> object_unparent nor in object_finalize_child_property. The
>> reference held by the child property itself will do.
>>
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> ---
>> qom/object.c | 14 ++++----------
>> 1 file changed, 4 insertions(+), 10 deletions(-)
>>
>> diff --git a/qom/object.c b/qom/object.c
>> index 01087e5..69a95d6 100644
>> --- a/qom/object.c
>> +++ b/qom/object.c
>> @@ -386,19 +386,9 @@ static void object_property_del_child(Object *obj, Object *child, Error **errp)
>>
>> void object_unparent(Object *obj)
>> {
>> - if (!obj->parent) {
>> - return;
>> - }
>> -
>> - object_ref(obj);
>> - if (obj->class->unparent) {
>> - (obj->class->unparent)(obj);
>> - }
>
> This changes this publicly visible API significantly, in that unparent
> from the childs point-of-view is now invisible in cases where you are
> doing a standalone object_unparent() call.
>
> I'm not sure why parent finalisation is the only occasion on which a
> genuine and complete unparenting is allowed? I think this API should
> remain complete should a QOM user wish to re-arrange child
> relationships seperate from any finalisations.
No, this is moved to object_finalize_child_property, i.e. the release
callback of child<> properties. object_property_del_child calls it.
The change is that, before, the unparent callback was only invoked if
you explicitly called object_unparent. Now it's always called as part
of finalize, even if you unparent the outer object but not the inner
ones. I find it more intuitive.
Note that this is not yet needed in these 13 patches.
Paolo
>> if (obj->parent) {
>> object_property_del_child(obj->parent, obj, NULL);
>> - obj->parent = NULL;
>> }
>> - object_unref(obj);
>> }
>>
>> static void object_deinit(Object *obj, TypeImpl *type)
>> @@ -1017,6 +1007,10 @@ static void object_finalize_child_property(Object *obj, const char *name,
>> {
>> Object *child = opaque;
>>
>> + if (child->class->unparent) {
>> + (child->class->unparent)(child);
>> + }
>> + child->parent = NULL;
>
> Can you just leave object_unparent() mostly as-is and call it from
> here? It's already guarded against repeated calls should there be
> users calling it manually before parent finalisations.
>
> Regards,
> Peter
>
>> object_unref(child);
>> }
>>
>> --
>> 1.8.3.1
>>
>>
>>
next prev parent reply other threads:[~2014-06-11 14:01 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-11 12:19 [Qemu-devel] [RFC PATCH 00/13] "Light" memory region QOMification Paolo Bonzini
2014-06-11 12:19 ` [Qemu-devel] [RFC PATCH 01/13] qom: object: Ignore refs/unrefs of NULL Paolo Bonzini
2014-06-11 12:19 ` [Qemu-devel] [RFC PATCH 02/13] qom: object: remove parent pointer when unparenting Paolo Bonzini
2014-06-11 12:19 ` [Qemu-devel] [RFC PATCH 03/13] qom: move unparenting to the child property's release callback Paolo Bonzini
2014-06-11 13:35 ` Peter Crosthwaite
2014-06-11 14:01 ` Paolo Bonzini [this message]
2014-06-11 14:10 ` Peter Crosthwaite
2014-06-11 12:19 ` [Qemu-devel] [RFC PATCH 04/13] qom: delete properties before calling instance_finalize Paolo Bonzini
2014-06-11 13:42 ` Peter Crosthwaite
2014-06-11 14:03 ` Paolo Bonzini
2014-06-17 12:29 ` Peter Crosthwaite
2014-06-11 12:19 ` [Qemu-devel] [RFC PATCH 05/13] memory: MemoryRegion: factor out subregion add functionality Paolo Bonzini
2014-06-11 12:19 ` [Qemu-devel] [RFC PATCH 06/13] memory: MemoryRegion: factor out memory region re-adder Paolo Bonzini
2014-06-11 12:19 ` [Qemu-devel] [RFC PATCH 07/13] memory: MemoryRegion: use /machine as default owner Paolo Bonzini
2014-06-17 12:24 ` Peter Crosthwaite
2014-06-11 12:19 ` [Qemu-devel] [RFC PATCH 08/13] memory: MemoryRegion: rename parent to container Paolo Bonzini
2014-06-11 13:46 ` Peter Crosthwaite
2014-06-11 12:19 ` [Qemu-devel] [RFC PATCH 09/13] memory: MemoryRegion: QOMify Paolo Bonzini
2014-06-11 13:12 ` Peter Crosthwaite
2014-06-11 14:15 ` Paolo Bonzini
2014-06-11 14:32 ` Peter Crosthwaite
2014-06-11 14:48 ` Paolo Bonzini
2014-06-17 12:17 ` Peter Crosthwaite
2014-06-11 12:19 ` [Qemu-devel] [RFC PATCH 10/13] memory: MemoryRegion: replace owner field with QOM parent Paolo Bonzini
2014-06-11 14:03 ` Peter Crosthwaite
2014-06-11 12:19 ` [Qemu-devel] [RFC PATCH 11/13] memory: MemoryRegion: Add container and addr props Paolo Bonzini
2014-06-11 12:19 ` [Qemu-devel] [RFC PATCH 12/13] memory: MemoryRegion: Add may-overlap and priority props Paolo Bonzini
2014-06-11 12:19 ` [Qemu-devel] [RFC PATCH 13/13] memory: MemoryRegion: Add size property Paolo Bonzini
2014-06-17 12:27 ` [Qemu-devel] [RFC PATCH 00/13] "Light" memory region QOMification Peter Crosthwaite
2014-06-17 12:35 ` Paolo Bonzini
2014-06-17 12:51 ` Peter Crosthwaite
2014-06-17 12:57 ` Paolo Bonzini
2014-06-25 9:45 ` Peter Crosthwaite
2014-06-25 9:47 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53986133.1070904@redhat.com \
--to=pbonzini@redhat.com \
--cc=afaerber@suse.de \
--cc=peter.crosthwaite@xilinx.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.