aboutsummaryrefslogtreecommitdiff
path: root/qdev-monitor.c
diff options
context:
space:
mode:
authorAndreas Färber <afaerber@suse.de>2013-10-07 16:42:34 +0200
committerAndreas Färber <afaerber@suse.de>2013-11-05 18:06:51 +0100
commit852e2c5008563692a8868260480e76b95bb9018c (patch)
treef76a31581ccaf1dec4287c71e9dfd27c8ced3f9a /qdev-monitor.c
parent2bcb0c62f620a7033e9e25c5b645d50bf9e6a8f2 (diff)
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>
Diffstat (limited to 'qdev-monitor.c')
-rw-r--r--qdev-monitor.c7
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;