qdev-monitor: Inline qdev_init() for device_add
For historic reasons, qdev_init() unparents the device on failure. Inline this to make the error paths clearer and consistent. Reviewed-by: Igor Mammedov <imammedo@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
parent
2bcb0c62f6
commit
852e2c5008
|
@ -458,6 +458,7 @@ DeviceState *qdev_device_add(QemuOpts *opts)
|
||||||
const char *driver, *path, *id;
|
const char *driver, *path, *id;
|
||||||
DeviceState *dev;
|
DeviceState *dev;
|
||||||
BusState *bus = NULL;
|
BusState *bus = NULL;
|
||||||
|
Error *err = NULL;
|
||||||
|
|
||||||
driver = qemu_opt_get(opts, "driver");
|
driver = qemu_opt_get(opts, "driver");
|
||||||
if (!driver) {
|
if (!driver) {
|
||||||
|
@ -540,7 +541,11 @@ DeviceState *qdev_device_add(QemuOpts *opts)
|
||||||
OBJECT(dev), NULL);
|
OBJECT(dev), NULL);
|
||||||
g_free(name);
|
g_free(name);
|
||||||
}
|
}
|
||||||
if (qdev_init(dev) < 0) {
|
object_property_set_bool(OBJECT(dev), true, "realized", &err);
|
||||||
|
if (err != NULL) {
|
||||||
|
qerror_report_err(err);
|
||||||
|
error_free(err);
|
||||||
|
object_unparent(OBJECT(dev));
|
||||||
object_unref(OBJECT(dev));
|
object_unref(OBJECT(dev));
|
||||||
qerror_report(QERR_DEVICE_INIT_FAILED, driver);
|
qerror_report(QERR_DEVICE_INIT_FAILED, driver);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
Loading…
Reference in New Issue