mirror of https://github.com/xemu-project/xemu.git
vl: Ensure qapi visitor properly ends struct visit
Guarantee that visit_end_struct() is called if visit_start_struct() succeeded. This matches the behavior of most other uses of visitors, and is a step towards the possibility of a future patch that adds and enforces some tighter semantics to the visitor interface (namely, cleanup of the visitor would no longer have to mop up as many leftovers from an aborted partial visit). The change to code here matches the flow of hmp.c:hmp_object_add(); a later patch will then further simplify the cleanup logic of both places by refactoring visit_end_struct() to not require a second local error object. Signed-off-by: Eric Blake <eblake@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <1454075341-13658-9-git-send-email-eblake@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
9b65859d5e
commit
014791b0df
14
vl.c
14
vl.c
|
@ -2819,6 +2819,7 @@ static bool object_create_delayed(const char *type)
|
|||
static int object_create(void *opaque, QemuOpts *opts, Error **errp)
|
||||
{
|
||||
Error *err = NULL;
|
||||
Error *err_end = NULL;
|
||||
char *type = NULL;
|
||||
char *id = NULL;
|
||||
OptsVisitor *ov;
|
||||
|
@ -2841,23 +2842,24 @@ static int object_create(void *opaque, QemuOpts *opts, Error **errp)
|
|||
goto out;
|
||||
}
|
||||
if (!type_predicate(type)) {
|
||||
visit_end_struct(v, NULL);
|
||||
goto out;
|
||||
}
|
||||
|
||||
qdict_del(pdict, "id");
|
||||
visit_type_str(v, &id, "id", &err);
|
||||
if (err) {
|
||||
goto out;
|
||||
goto out_end;
|
||||
}
|
||||
|
||||
object_add(type, id, pdict, v, &err);
|
||||
if (err) {
|
||||
goto out;
|
||||
}
|
||||
visit_end_struct(v, &err);
|
||||
if (err) {
|
||||
|
||||
out_end:
|
||||
visit_end_struct(v, &err_end);
|
||||
if (!err && err_end) {
|
||||
qmp_object_del(id, NULL);
|
||||
}
|
||||
error_propagate(&err, err_end);
|
||||
|
||||
out:
|
||||
opts_visitor_cleanup(ov);
|
||||
|
|
Loading…
Reference in New Issue