]> git.proxmox.com Git - mirror_qemu.git/commit - include/hw/qdev-core.h
qdev: correctly send DEVICE_DELETED for recursively-deleted devices
authorPaolo Bonzini <pbonzini@redhat.com>
Thu, 26 Jun 2014 13:10:03 +0000 (15:10 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 1 Jul 2014 08:20:42 +0000 (10:20 +0200)
commit352e8da743f26948cb12d0ee53c455f328f59bbe
tree16c4c0990f625f55e1a69ca5b107d2a28db7b6b7
parent1f6245e5aba94ff7acd34f8514da7dfb9712935d
qdev: correctly send DEVICE_DELETED for recursively-deleted devices

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 5942a19, though that
commit in turn fixed a possible segfault in the same test).

Reported-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
hw/core/qdev.c
include/hw/qdev-core.h