On 25/02/13 11:44, Paolo Bonzini wrote:
> Il 25/02/2013 09:09, Christian Borntraeger ha scritto:
>> Hmm, the old sequence was 
>>
>>      object_unparent(OBJECT(dev));
>>      qdev_free(dev) ---+
>>                        |
>>                        V
>> ...
>>           object_unparent(OBJECT(dev));  now the last reference is gone, 
>> object is freed
>>           object_unref(OBJECT(dev));     now the reference of a deleted 
>> object becomes -1
>> ...
>>
>> Isnt that a problem in itself that we modify a reference counter in an 
>> deleted object?
> 
> The second object_unparent should do nothing.  So before you had:
> 
>       object_unparent(OBJECT(dev));       leaves refcount=1
>       qdev_free(dev) ---+
>                         |
>                         V
>            object_unparent(OBJECT(dev));  do nothing
>            object_unref(OBJECT(dev));     refcount=0, object freed
> 
> After the object_unref was removed you had:
> 
>       object_unparent(OBJECT(dev));       refcount=0, object freed
>       qdev_free(dev) ---+
>                         |
>                         V
>            object_unparent(OBJECT(dev));  dangling pointer!
> 


Got it. Thanks



Reply via email to