Commit 4ed658ca authored by Andreas Färber's avatar Andreas Färber Committed by Anthony Liguori
Browse files

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: default avatarAndreas Färber <afaerber@suse.de>
Cc: Anthony Liguori <aliguori@codemonkey.ws>
Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
parent 438e1c79
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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;