qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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 {
>
>

  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).