Il 28/02/2012 10:43, Igor Mitsyanko ha scritto: > On 02/28/2012 12:39 PM, Paolo Bonzini wrote: >> Il 28/02/2012 08:18, Igor Mitsyanko ha scritto: >>> QOM documentation states that for objects of type with @instance_size >>> == 0 size >>> will be assigned to match parent object's size. But currently this >>> feauture is >>> not implemented and qemu asserts during creation of object with zero >>> instance_size. >>> This patch adjusts actual behaviour in accordance with documentation. >> >> You can do it just once, in type_get_parent instead.
Sorry, rewind. "You can do it in type_class_init instead" (you are obviously doing it just once since you assign to type->instance_size). type_class_init mostly deals with class initialization, but it's really the place where a type is hooked up with its parent. Perhaps type_late_init would be a better name. I think the problem is misplaced type_class_init calls. void object_initialize(void *data, const char *typename) { TypeImpl *type = type_get_by_name(typename); + type->instance_size = object_get_instance_size(type); object_initialize_with_type(data, type); } object_initialize_with_type needs to call type_class_init before testing type->instance_size, not after. @@ -357,6 +371,7 @@ Object *object_new_with_type(Type type) g_assert(type != NULL); + type->instance_size = object_get_instance_size(type); And this should also be a call to type_class_init. obj = g_malloc(type->instance_size); object_initialize_with_type(obj, type); object_ref(obj); Paolo