Am 26.03.2012 15:46, schrieb Andreas Färber: > The Object::realized property can only be set once and, on setting it, > invokes the ObjectClass::realize callback. > > Signed-off-by: Andreas Färber <afaer...@suse.de> > Cc: Anthony Liguori <anth...@codemonkey.ws> > Cc: Paolo Bonzini <pbonz...@redhat.com> > --- > include/qemu/object.h | 2 ++ > qom/object.c | 31 +++++++++++++++++++++++++++++++ > 2 files changed, 33 insertions(+), 0 deletions(-) [snip] > diff --git a/qom/object.c b/qom/object.c > index 9cd9506..ec143ad 100644 > --- a/qom/object.c > +++ b/qom/object.c > @@ -273,6 +273,34 @@ static void object_init_with_type(Object *obj, TypeImpl > *ti) > } > } > > +static void object_get_realized(Object *obj, Visitor *v, void *opaque, > + const char *name, Error **errp) > +{ > + visit_type_bool(v, &obj->realized, name, errp); > +} > + > +static void object_set_realized(Object *obj, Visitor *v, void *opaque, > + const char *name, Error **errp) > +{ > + bool value; > + > + if (obj->realized) { > + error_set(errp, QERR_PERMISSION_DENIED); > + return; > + } > + > + visit_type_bool(v, &value, name, errp); > + if (error_is_set(errp) || !value) { > + return; > + } > + > + if (obj->class->realize != NULL && obj->class->realize(obj) != 0) { > + error_set(errp, QERR_DEVICE_INIT_FAILED, object_get_typename(obj));
Will introduce a QERR_OBJECT_REALIZE_FAILED for v2 based on feedback. /-F > + return; > + } > + obj->realized = true; > +} > + > void object_initialize_with_type(void *data, TypeImpl *type) > { > Object *obj = data; [snip] -- SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg