qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 05/21] char: add a /chardevs container


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH v2 05/21] char: add a /chardevs container
Date: Mon, 27 Feb 2017 16:39:12 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0


On 27/02/2017 14:41, Marc-André Lureau wrote:
>  
> -    chr = CHARDEV(object_new(typename));
> +    if (id) {
> +        obj = object_new_with_props(typename, get_chardevs_root(),
> +                                    id, &local_err, NULL);
> +    } else {
> +        obj = object_new(typename);
> +    }

I think you should open code object_new_with_props.  This can be just
object_new(typename)...

> +    if (local_err) {
> +        assert(!obj);
> +        goto end;
> +    }
> +
> +    chr = CHARDEV(obj);
>      chr->label = g_strdup(id);
>  
>      qemu_char_open(chr, backend, &be_opened, &local_err);
>      if (local_err) {
> -        error_propagate(errp, local_err);
> -        object_unref(OBJECT(chr));
> -        return NULL;
> +        goto end;
>      }
>  
>      if (!chr->filename) {
> @@ -1250,6 +1263,18 @@ Chardev *qemu_chardev_new(const char *id, const char 
> *typename,
>          qemu_chr_be_event(chr, CHR_EVENT_OPENED);
>      }
>  
> +end:
> +    if (local_err) {
> +        error_propagate(errp, local_err);
> +        if (chr) {
> +            if (id) {
> +                object_unparent(OBJECT(chr));
> +            } else {
> +                object_unref(OBJECT(chr));
> +            }

Then here you do not have a parent object and you can do only unref...

> +        }
> +        return NULL;
> +    }

... while here you do the object_property_add_child+object_unref.  The
object_property_add_child keeps the object alive, while object_unref
drops the reference originally returned by object_new.

Paolo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]