qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 06/22] char: add a /chardevs container


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH 06/22] char: add a /chardevs container
Date: Thu, 9 Feb 2017 18:16:03 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1


On 07/02/2017 21:03, Marc-André Lureau wrote:
> Hi
> 
> ----- Original Message -----
>>
>>
>> On 02/02/2017 15:51, Marc-André Lureau wrote:
>>> +    if (QTAILQ_IN_USE(chr, next)) {
>>> +        QTAILQ_REMOVE(&chardevs, chr, next);
>>> +    }
>>> +    if (OBJECT(chr)->parent) {
>>> +        object_unparent(OBJECT(chr));
>>> +    } else {
>>> +        object_unref(OBJECT(chr));
>>> +    }
>>
>> What's the case where the "else" is used?  Probably qemu_chr_delete
>> callers should be changed to use object_unparent or object_unref directly.
> 
> I thought about that, but calling object_unparent() seems weird,
> since callers aren't much aware of the fact that chardev are added or not to a
> container (useless distinction imho). I wish the last object_unref()
> would automatically unparent, if the object has a parent. Would that be
> acceptable?

There is a distinction between the two.  The idea is that unparent
removes all persistent references in the object tree, while unref only
removes transient references.  So for example unparent will detach a
device from its bus.  Unparent is basically exploiting the object tree
in order to simplify the handling of reference cycles.

Once you add an object with object_property_add_child, you probably
should remove any transient references you have (such as the one you got
with object_new) and from that point on use object_unparent only.

Paolo



reply via email to

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