From: Paolo Bonzini <pbonzini@redhat.com>
To: mtosatti@redhat.com, qemu-devel@nongnu.org
Cc: gleb@kernel.org, mprivozn@redhat.com, armbru@redhat.com
Subject: Re: [Qemu-devel] [patch 2/3] add object_property_add_alias
Date: Thu, 05 Jun 2014 13:09:23 +0200 [thread overview]
Message-ID: <53904FE3.4040306@redhat.com> (raw)
In-Reply-To: <20140604175446.484888751@amt.cnet>
Il 04/06/2014 19:52, mtosatti@redhat.com ha scritto:
> Allowing addition of a link without keeping pointer-to-pointer.
>
> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
>
> ---
> include/qom/object.h | 13 +++++++++
> qom/object.c | 73 +++++++++++++++++++++++++++++++++++++++++----------
> 2 files changed, 72 insertions(+), 14 deletions(-)
>
> Index: qemu/include/qom/object.h
> ===================================================================
> --- qemu.orig/include/qom/object.h 2014-06-02 23:12:51.875693325 -0300
> +++ qemu/include/qom/object.h 2014-06-02 23:14:13.045432426 -0300
> @@ -1073,6 +1073,19 @@
> } ObjectPropertyLinkFlags;
>
> /**
> + * object_property_add_alias:
> + * @obj: the object to add a property to
> + * @name: the name of the property
> + * @alias: the alias object
> + * @errp: if an error occurs, a pointer to an area to store the area
> + *
> + * Add a link under obj, named name, pointing to alias.
> + *
> + */
> +void object_property_add_alias(Object *obj, const char *name,
> + Object *alias, Error **errp);
> +
> +/**
> * object_property_allow_set_link:
> *
> * The default implementation of the object_property_add_link() check()
> Index: qemu/qom/object.c
> ===================================================================
> --- qemu.orig/qom/object.c 2014-06-02 23:12:51.875693325 -0300
> +++ qemu/qom/object.c 2014-06-02 23:14:13.046432423 -0300
> @@ -1023,27 +1023,71 @@
> g_free(type);
> }
>
> +typedef struct {
> + Object *child;
> + Object **childp;
These field names are ugly... not your fault, but perhaps
Object **linkp;
Object *alias_dest;
would be better. It would also avoid the mistake below:
> @@ -1096,7 +1140,7 @@
> {
> Error *local_err = NULL;
> LinkProperty *prop = opaque;
> - Object **child = prop->child;
> + Object **child = prop->childp;
> Object *old_target = *child;
> Object *new_target = NULL;
> char *path = NULL;
This is object_set_link_property. It writes *child but not prop->child,
and subsequent calls to object_get_link_property incorrect.
However, since a similar need arose recently in one of Peter
Crosthwaite's patches, let's add a generic resolve mechanism. I'll post
a short series in a second, as soon as I finish testing it.
Paolo
> @@ -1133,8 +1177,8 @@
> {
> LinkProperty *prop = opaque;
>
> - if ((prop->flags & OBJ_PROP_LINK_UNREF_ON_RELEASE) && *prop->child) {
> - object_unref(*prop->child);
> + if ((prop->flags & OBJ_PROP_LINK_UNREF_ON_RELEASE) && prop->child) {
> + object_unref(prop->child);
> }
> g_free(prop);
> }
> @@ -1150,7 +1194,8 @@
> LinkProperty *prop = g_malloc(sizeof(*prop));
> gchar *full_type;
>
> - prop->child = child;
> + prop->childp = child;
> + prop->child = *child;
> prop->check = check;
> prop->flags = flags;
>
> @@ -1227,7 +1272,7 @@
>
> if (object_property_is_link(prop)) {
> LinkProperty *lprop = prop->opaque;
> - return *lprop->child;
> + return lprop->child;
> } else if (object_property_is_child(prop)) {
> return prop->opaque;
> } else {
>
>
next prev parent reply other threads:[~2014-06-05 11:09 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-04 17:52 [Qemu-devel] [patch 0/3] add QMP command to reset rtc interrupt backlog (v4) mtosatti
2014-06-04 17:52 ` [Qemu-devel] [patch 1/3] mc146818rtc: add rtc-reset-reinjection QMP command mtosatti
2014-06-17 12:32 ` Michael S. Tsirkin
2014-06-17 13:12 ` Eric Blake
2014-06-04 17:52 ` [Qemu-devel] [patch 2/3] add object_property_add_alias mtosatti
2014-06-05 11:09 ` Paolo Bonzini [this message]
2014-06-04 17:52 ` [Qemu-devel] [patch 3/3] mc146818rtc: add "rtc" link to "/machine" mtosatti
[not found] <20140530201145.194061806@amt.cnet>
2014-06-02 17:51 ` [Qemu-devel] [patch 0/3] add QMP command to reset rtc interrupt backlog (v3) mtosatti
2014-06-02 17:51 ` [Qemu-devel] [patch 2/3] add object_property_add_alias mtosatti
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=53904FE3.4040306@redhat.com \
--to=pbonzini@redhat.com \
--cc=armbru@redhat.com \
--cc=gleb@kernel.org \
--cc=mprivozn@redhat.com \
--cc=mtosatti@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).