summaryrefslogtreecommitdiff
path: root/hw/qdev.c
diff options
context:
space:
mode:
authorAndreas Färber <afaerber@suse.de>2012-02-17 02:47:44 +0100
committerAnthony Liguori <aliguori@us.ibm.com>2012-02-17 09:58:21 -0600
commit4ed658ca925249021789d6a51fd6f99f68213f28 (patch)
tree44158198e9a6ed5dcc15a36fc984ef3c5f35534b /hw/qdev.c
parent438e1c79f196f0bc9411ef8183f9906e0efbd578 (diff)
downloadqemu-4ed658ca925249021789d6a51fd6f99f68213f28.zip
qdev: Fix qdev_try_create() semantics
Since QOM'ification, qdev_try_create() uses object_new() internally, which asserts "type != NULL" when the type is not registered. This was revealed by the combination of kvmclock's kvm_enabled() check and early QOM type registration. Check whether the class exists before calling object_new(), so that the caller (e.g., qdev_create) can fail gracefully, telling us which device could not be created. Signed-off-by: Andreas Färber <afaerber@suse.de> Cc: Anthony Liguori <aliguori@codemonkey.ws> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'hw/qdev.c')
-rw-r--r--hw/qdev.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/hw/qdev.c b/hw/qdev.c
index f0eb3a7384..ee21d90e80 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -117,6 +117,9 @@ DeviceState *qdev_try_create(BusState *bus, const char *name)
{
DeviceState *dev;
+ if (object_class_by_name(name) == NULL) {
+ return NULL;
+ }
dev = DEVICE(object_new(name));
if (!dev) {
return NULL;