Skip to content
  • Paolo Bonzini's avatar
    qdev: correctly send DEVICE_DELETED for recursively-deleted devices · 352e8da7
    Paolo Bonzini authored
    When a device is unparented (i.e. made completely hidden from management)
    we want to send a DEVICE_DELETED event only if the device actually was
    realized.  This avoids raising DEVICE_DELETED events when device_add
    fails.
    
    However, this does not work right for recursively-deleted
    devices: the whole tree is _first_ unrealized, _then_ unparented.
    Then device_unparent sees realized==false and fails to trigger
    the event.  The solution is simply to move have_realized into
    the DeviceState struct.  If device_add fails, we never set the
    new field to true and DEVICE_DELETED is not sent.
    
    Fixes qemu-iotests testcase 067 (broken by commit 5942a190
    
    , though that
    commit in turn fixed a possible segfault in the same test).
    
    Reported-by: default avatarMarkus Armbruster <armbru@redhat.com>
    Reviewed-by: default avatarMarkus Armbruster <armbru@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    352e8da7