Skip to content

Commit

Permalink
qom: Reduce use of error_propagate()
Browse files Browse the repository at this point in the history
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 <[email protected]>
Message-Id: <[email protected]>
Reviewed-by: Markus Armbruster <[email protected]>
Reviewed-by: Michael S. Tsirkin <[email protected]>
Tested-by: Peter Krempa <[email protected]>
Signed-off-by: Kevin Wolf <[email protected]>
  • Loading branch information
kevmw committed Oct 15, 2021
1 parent ee8a1c6 commit dbc8221
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 17 deletions.
7 changes: 3 additions & 4 deletions qom/object.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Error **errp)
{
Error *err = NULL;
ERRP_GUARD();
ObjectProperty *prop = object_property_find_err(obj, name, errp);

if (prop == NULL) {
Expand All @@ -1400,9 +1400,8 @@ bool object_property_set(Object *obj, const char *name, Visitor *v,
error_setg(errp, QERR_PERMISSION_DENIED);
return false;
}
prop->set(obj, v, name, prop->opaque, &err);
error_propagate(errp, err);
return !err;
prop->set(obj, v, name, prop->opaque, errp);
return !*errp;
}

bool object_property_set_str(Object *obj, const char *name,
Expand Down
19 changes: 6 additions & 13 deletions qom/object_interfaces.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,25 +46,18 @@ static void object_set_properties_from_qdict(Object *obj, const QDict *qdict,
Visitor *v, Error **errp)
{
const QDictEntry *e;
Error *local_err = NULL;

if (!visit_start_struct(v, NULL, NULL, 0, &local_err)) {
goto out;
if (!visit_start_struct(v, NULL, NULL, 0, errp)) {
return;
}
for (e = qdict_first(qdict); e; e = qdict_next(qdict, e)) {
if (!object_property_set(obj, e->key, v, &local_err)) {
break;
if (!object_property_set(obj, e->key, v, errp)) {
goto out;
}
}
if (!local_err) {
visit_check_struct(v, &local_err);
}
visit_end_struct(v, NULL);

visit_check_struct(v, errp);
out:
if (local_err) {
error_propagate(errp, local_err);
}
visit_end_struct(v, NULL);
}

void object_set_properties_from_keyval(Object *obj, const QDict *qdict,
Expand Down

0 comments on commit dbc8221

Please sign in to comment.