qom: Reduce use of error_propagate()

ERRP_GUARD() makes debugging easier by making sure that &error_abort
still fails at the real origin of the error instead of
error_propagate().

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Message-Id: <20211008133442.141332-5-kwolf@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Tested-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Kevin Wolf 2021-10-08 15:34:31 +02:00
parent ee8a1c63d3
commit dbc8221f8c
2 changed files with 9 additions and 17 deletions

View File

@ -1389,7 +1389,7 @@ bool object_property_get(Object *obj, const char *name, Visitor *v,
bool object_property_set(Object *obj, const char *name, Visitor *v, bool object_property_set(Object *obj, const char *name, Visitor *v,
Error **errp) Error **errp)
{ {
Error *err = NULL; ERRP_GUARD();
ObjectProperty *prop = object_property_find_err(obj, name, errp); ObjectProperty *prop = object_property_find_err(obj, name, errp);
if (prop == NULL) { if (prop == NULL) {
@ -1400,9 +1400,8 @@ bool object_property_set(Object *obj, const char *name, Visitor *v,
error_setg(errp, QERR_PERMISSION_DENIED); error_setg(errp, QERR_PERMISSION_DENIED);
return false; return false;
} }
prop->set(obj, v, name, prop->opaque, &err); prop->set(obj, v, name, prop->opaque, errp);
error_propagate(errp, err); return !*errp;
return !err;
} }
bool object_property_set_str(Object *obj, const char *name, bool object_property_set_str(Object *obj, const char *name,

View File

@ -46,25 +46,18 @@ static void object_set_properties_from_qdict(Object *obj, const QDict *qdict,
Visitor *v, Error **errp) Visitor *v, Error **errp)
{ {
const QDictEntry *e; const QDictEntry *e;
Error *local_err = NULL;
if (!visit_start_struct(v, NULL, NULL, 0, &local_err)) { if (!visit_start_struct(v, NULL, NULL, 0, errp)) {
goto out; return;
} }
for (e = qdict_first(qdict); e; e = qdict_next(qdict, e)) { for (e = qdict_first(qdict); e; e = qdict_next(qdict, e)) {
if (!object_property_set(obj, e->key, v, &local_err)) { if (!object_property_set(obj, e->key, v, errp)) {
break; goto out;
} }
} }
if (!local_err) { visit_check_struct(v, errp);
visit_check_struct(v, &local_err);
}
visit_end_struct(v, NULL);
out: out:
if (local_err) { visit_end_struct(v, NULL);
error_propagate(errp, local_err);
}
} }
void object_set_properties_from_keyval(Object *obj, const QDict *qdict, void object_set_properties_from_keyval(Object *obj, const QDict *qdict,