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!

Paolo

Reply via email to