mirror of
https://github.com/qemu/qemu.git
synced 2025-08-09 01:50:43 +00:00
hmp: Call visit_end_struct() after visit_start_struct() succeeds
When visit_start_struct() succeeds, visit_end_struct() must be called. hmp_object_add() doesn't when a member visit fails. As far as I can tell, the opts visitor copes okay with the misuse. Fix it anyway. Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
This commit is contained in:
parent
be3c771796
commit
f9f3a5ecde
16
hmp.c
16
hmp.c
@ -1388,6 +1388,7 @@ void hmp_netdev_del(Monitor *mon, const QDict *qdict)
|
|||||||
void hmp_object_add(Monitor *mon, const QDict *qdict)
|
void hmp_object_add(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
|
Error *err_end = NULL;
|
||||||
QemuOpts *opts;
|
QemuOpts *opts;
|
||||||
char *type = NULL;
|
char *type = NULL;
|
||||||
char *id = NULL;
|
char *id = NULL;
|
||||||
@ -1411,24 +1412,23 @@ void hmp_object_add(Monitor *mon, const QDict *qdict)
|
|||||||
qdict_del(pdict, "qom-type");
|
qdict_del(pdict, "qom-type");
|
||||||
visit_type_str(opts_get_visitor(ov), &type, "qom-type", &err);
|
visit_type_str(opts_get_visitor(ov), &type, "qom-type", &err);
|
||||||
if (err) {
|
if (err) {
|
||||||
goto out_clean;
|
goto out_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
qdict_del(pdict, "id");
|
qdict_del(pdict, "id");
|
||||||
visit_type_str(opts_get_visitor(ov), &id, "id", &err);
|
visit_type_str(opts_get_visitor(ov), &id, "id", &err);
|
||||||
if (err) {
|
if (err) {
|
||||||
goto out_clean;
|
goto out_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
object_add(type, id, pdict, opts_get_visitor(ov), &err);
|
object_add(type, id, pdict, opts_get_visitor(ov), &err);
|
||||||
if (err) {
|
|
||||||
goto out_clean;
|
out_end:
|
||||||
}
|
visit_end_struct(opts_get_visitor(ov), &err_end);
|
||||||
visit_end_struct(opts_get_visitor(ov), &err);
|
if (!err && err_end) {
|
||||||
if (err) {
|
|
||||||
qmp_object_del(id, NULL);
|
qmp_object_del(id, NULL);
|
||||||
}
|
}
|
||||||
|
error_propagate(&err, err_end);
|
||||||
out_clean:
|
out_clean:
|
||||||
opts_visitor_cleanup(ov);
|
opts_visitor_cleanup(ov);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user