diff options
| author | Andreas Färber | 2013-10-07 16:42:34 +0200 |
|---|---|---|
| committer | Andreas Färber | 2013-11-05 18:06:51 +0100 |
| commit | 852e2c5008563692a8868260480e76b95bb9018c (patch) | |
| tree | f76a31581ccaf1dec4287c71e9dfd27c8ced3f9a | |
| parent | qdev-monitor: Avoid qdev as variable name (diff) | |
| download | qemu-852e2c5008563692a8868260480e76b95bb9018c.tar.gz qemu-852e2c5008563692a8868260480e76b95bb9018c.tar.xz qemu-852e2c5008563692a8868260480e76b95bb9018c.zip | |
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>
| -rw-r--r-- | qdev-monitor.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/qdev-monitor.c b/qdev-monitor.c index a46da32e99..dc37a43dd9 100644 --- a/qdev-monitor.c +++ b/qdev-monitor.c @@ -458,6 +458,7 @@ DeviceState *qdev_device_add(QemuOpts *opts) const char *driver, *path, *id; DeviceState *dev; BusState *bus = NULL; + Error *err = NULL; driver = qemu_opt_get(opts, "driver"); if (!driver) { @@ -540,7 +541,11 @@ DeviceState *qdev_device_add(QemuOpts *opts) OBJECT(dev), NULL); 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)); qerror_report(QERR_DEVICE_INIT_FAILED, driver); return NULL; |
