Am 13.06.2012 12:03, schrieb Paolo Bonzini: > Il 13/06/2012 11:38, Peter A. G. Crosthwaite ha scritto: >> Objects that define interface delegate the creation of the interface object >> to the interface type. These means that object_new() when called recursively >> by
I am pretty certain that object_new() is NOT called recursively! The static helpers of object_instantiate() are, and abstractness should not matter there or none of the, e.g., CPU subclasses could be created... So if there is a problem this description is bogus. >> the interface instantior is going to bork because its trying to instantiate >> an abstract type. Fixed by making interface types concrete. >> >> Signed-off-by: Peter A. G. Crosthwaite <peter.crosthwa...@petalogix.com> >> --- >> qom/object.c | 2 +- >> 1 files changed, 1 insertions(+), 1 deletions(-) >> >> diff --git a/qom/object.c b/qom/object.c >> index 1eba795..c3a7a47 100644 >> --- a/qom/object.c >> +++ b/qom/object.c >> @@ -191,7 +191,7 @@ static void type_class_interface_init(TypeImpl *ti, >> InterfaceImpl *iface) >> .parent = iface->parent, >> .class_size = sizeof(InterfaceClass), >> .class_init = iface->interface_initfn, >> - .abstract = true, >> + .abstract = false, >> }; >> char *name = g_strdup_printf("<%s::%s>", ti->name, iface->parent); >> >> > > Reviewed-by: Paolo Bonzini <pbonz...@redhat.com> Why? Object is abstract, too, and in patch 3/8 a type is being derived from TYPE_INTERFACE. So if we want to make interface non-abstract then we don't need the Container type either since it is simply the non-abstract version of Object. My guess is that, if at all, something else is going wrong and this is papering over it. Andreas -- SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg