This has finally reached the front of my review queue. I apologize for the loooong delay.
Copying Paolo for another pair of eyeballs (he wrote this code). Yang Hongyang <yan...@cn.fujitsu.com> writes: > When delete an object, we need to delete the associated qemu opts, > otherwise, we can not add another object with the same name using > object_add. > The case happens when we start qemu with: > -object xxx,id=aa > then we delete this object with: > object_del aa > then add the object with: > object_add xxx,id=aa > > QEMU will return error with Duplicate ID error. > > Signed-off-by: Yang Hongyang <yan...@cn.fujitsu.com> > --- > qmp.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/qmp.c b/qmp.c > index 9623c80..4bd44c3 100644 > --- a/qmp.c > +++ b/qmp.c > @@ -686,6 +686,7 @@ void qmp_object_del(const char *id, Error **errp) > { > Object *container; > Object *obj; > + QemuOpts *opts; > > container = object_get_objects_root(); > obj = object_resolve_path_component(container, id); > @@ -699,6 +700,9 @@ void qmp_object_del(const char *id, Error **errp) > return; > } > object_unparent(obj); > + > + opts = qemu_opts_find(qemu_find_opts_err("object", NULL), id); > + qemu_opts_del(opts); qemu_find_opts_err("object", &error_abort) please, because when it fails, we want to die right away, not when the null pointer it returns gets dereferenced. Same sloppiness in netdev_del_completion() and qmp_netdev_del(), not your patch's fault. Elsewhere, we store the QemuOpts in the object just so we can delete it: DeviceState, DriveInfo. Paolo, what do you think? > } > > MemoryDeviceInfoList *qmp_query_memory_devices(Error **errp)