On 01/09/2017 08:17 AM, Igor Mammedov wrote: >> Wait. Isn't this going to inject an 'id' dict member to every use of >> user_creatable_add_type()? But not all QAPI structs contain an id >> member. Which means that you are now explicitly relying on the visitor >> to silently ignore garbage in the dictionary, rather than our desired >> goal of only validating if the dictionary exactly matches what the QAPI >> says it will match. >> >> I'm not sure if I like this hack, or if there is a better way to do >> things when using a strict (rather than relaxed) input visitor. > a bit less ugly variant but with the same basic idea would look like: > -------------- > Subject: [PATCH] fix qmp/hmp query-memdev not reporting IDs of memory > backends > > > Considering 'id' is mandatory for user_creatable objects/backends > > and user_creatable_add_type() always has it as an argument > > regardless of where from it is called CLI/monitor or QMP, > > Fix issue by adding 'id' property to hostmem backends and > > set it in user_creatable_add_type() for every object that > > implements 'id' property. Then later at query-memdev time > > get 'id' from object directly.
Yes, that seems like an improved message. > > > Signed-off-by: Igor Mammedov <[email protected]> > > [...] > > diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c > index 9b4155a..03a95c3 100644 > --- a/qom/object_interfaces.c > +++ b/qom/object_interfaces.c > @@ -62,6 +62,12 @@ Object *user_creatable_add_type(const char *type, const > char *id, > > assert(qdict); > obj = object_new(type); > + if (object_property_find(obj, "id", NULL)) { > + object_property_set_str(obj, id, "id", &local_err); > + if (local_err) { > + goto out; > + } > + } Works for me. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
