qdev: Free QemuOpts when the QOM path goes away
commitabed886ec60cf239a03515cf0b30fb11fa964c44
authorPaolo Bonzini <pbonzini@redhat.com>
Mon, 19 Oct 2015 11:11:39 +0000 (19 13:11 +0200)
committerAndreas Färber <afaerber@suse.de>
Mon, 18 Jan 2016 16:47:58 +0000 (18 17:47 +0100)
tree1bf4f7f728ba4e8588cf8c2b5c0b87a35f6b5cf0
parent7746abd8e9ee9db20c0b0fdb19504f163ba3cbea
qdev: Free QemuOpts when the QOM path goes away

Otherwise there is a race where the DEVICE_DELETED event has been sent but
attempts to reuse the ID will fail.

Note that similar races exist for other QemuOpts, which this patch
does not attempt to fix.

For example, if the device is a block device, then unplugging it also
deletes its backend.  However, this backend's get deleted in
drive_info_del(), which is only called when properties are
destroyed.  Just like device_finalize(), drive_info_del() is called
some time after DEVICE_DELETED is sent.  A separate patch series has
been sent to plug this other bug.  Character devices also have yet to
be fixed.

Reported-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
hw/core/qdev.c