hmp: Cache use of qapi visitor
Cache the visitor in a local variable instead of repeatedly calling the accessor. Signed-off-by: Eric Blake <eblake@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <1454075341-13658-8-git-send-email-eblake@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
7019738d4c
commit
9b65859d5e
12
hmp.c
12
hmp.c
@ -1659,6 +1659,7 @@ void hmp_object_add(Monitor *mon, const QDict *qdict)
|
||||
char *id = NULL;
|
||||
OptsVisitor *ov;
|
||||
QDict *pdict;
|
||||
Visitor *v;
|
||||
|
||||
opts = qemu_opts_from_qdict(qemu_find_opts("object"), qdict, &err);
|
||||
if (err) {
|
||||
@ -1667,28 +1668,29 @@ void hmp_object_add(Monitor *mon, const QDict *qdict)
|
||||
|
||||
ov = opts_visitor_new(opts);
|
||||
pdict = qdict_clone_shallow(qdict);
|
||||
v = opts_get_visitor(ov);
|
||||
|
||||
visit_start_struct(opts_get_visitor(ov), NULL, NULL, NULL, 0, &err);
|
||||
visit_start_struct(v, NULL, NULL, NULL, 0, &err);
|
||||
if (err) {
|
||||
goto out_clean;
|
||||
}
|
||||
|
||||
qdict_del(pdict, "qom-type");
|
||||
visit_type_str(opts_get_visitor(ov), &type, "qom-type", &err);
|
||||
visit_type_str(v, &type, "qom-type", &err);
|
||||
if (err) {
|
||||
goto out_end;
|
||||
}
|
||||
|
||||
qdict_del(pdict, "id");
|
||||
visit_type_str(opts_get_visitor(ov), &id, "id", &err);
|
||||
visit_type_str(v, &id, "id", &err);
|
||||
if (err) {
|
||||
goto out_end;
|
||||
}
|
||||
|
||||
object_add(type, id, pdict, opts_get_visitor(ov), &err);
|
||||
object_add(type, id, pdict, v, &err);
|
||||
|
||||
out_end:
|
||||
visit_end_struct(opts_get_visitor(ov), &err_end);
|
||||
visit_end_struct(v, &err_end);
|
||||
if (!err && err_end) {
|
||||
qmp_object_del(id, NULL);
|
||||
}
|
||||
|
12
vl.c
12
vl.c
@ -2824,17 +2824,19 @@ static int object_create(void *opaque, QemuOpts *opts, Error **errp)
|
||||
OptsVisitor *ov;
|
||||
QDict *pdict;
|
||||
bool (*type_predicate)(const char *) = opaque;
|
||||
Visitor *v;
|
||||
|
||||
ov = opts_visitor_new(opts);
|
||||
pdict = qemu_opts_to_qdict(opts, NULL);
|
||||
v = opts_get_visitor(ov);
|
||||
|
||||
visit_start_struct(opts_get_visitor(ov), NULL, NULL, NULL, 0, &err);
|
||||
visit_start_struct(v, NULL, NULL, NULL, 0, &err);
|
||||
if (err) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
qdict_del(pdict, "qom-type");
|
||||
visit_type_str(opts_get_visitor(ov), &type, "qom-type", &err);
|
||||
visit_type_str(v, &type, "qom-type", &err);
|
||||
if (err) {
|
||||
goto out;
|
||||
}
|
||||
@ -2843,16 +2845,16 @@ static int object_create(void *opaque, QemuOpts *opts, Error **errp)
|
||||
}
|
||||
|
||||
qdict_del(pdict, "id");
|
||||
visit_type_str(opts_get_visitor(ov), &id, "id", &err);
|
||||
visit_type_str(v, &id, "id", &err);
|
||||
if (err) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
object_add(type, id, pdict, opts_get_visitor(ov), &err);
|
||||
object_add(type, id, pdict, v, &err);
|
||||
if (err) {
|
||||
goto out;
|
||||
}
|
||||
visit_end_struct(opts_get_visitor(ov), &err);
|
||||
visit_end_struct(v, &err);
|
||||
if (err) {
|
||||
qmp_object_del(id, NULL);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user