Skip to content

Commit dbc8221

Browse files
committed
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 <[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]>
1 parent ee8a1c6 commit dbc8221

File tree

2 files changed

+9
-17
lines changed

2 files changed

+9
-17
lines changed

qom/object.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1389,7 +1389,7 @@ bool object_property_get(Object *obj, const char *name, Visitor *v,
13891389
bool object_property_set(Object *obj, const char *name, Visitor *v,
13901390
Error **errp)
13911391
{
1392-
Error *err = NULL;
1392+
ERRP_GUARD();
13931393
ObjectProperty *prop = object_property_find_err(obj, name, errp);
13941394

13951395
if (prop == NULL) {
@@ -1400,9 +1400,8 @@ bool object_property_set(Object *obj, const char *name, Visitor *v,
14001400
error_setg(errp, QERR_PERMISSION_DENIED);
14011401
return false;
14021402
}
1403-
prop->set(obj, v, name, prop->opaque, &err);
1404-
error_propagate(errp, err);
1405-
return !err;
1403+
prop->set(obj, v, name, prop->opaque, errp);
1404+
return !*errp;
14061405
}
14071406

14081407
bool object_property_set_str(Object *obj, const char *name,

qom/object_interfaces.c

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -46,25 +46,18 @@ static void object_set_properties_from_qdict(Object *obj, const QDict *qdict,
4646
Visitor *v, Error **errp)
4747
{
4848
const QDictEntry *e;
49-
Error *local_err = NULL;
5049

51-
if (!visit_start_struct(v, NULL, NULL, 0, &local_err)) {
52-
goto out;
50+
if (!visit_start_struct(v, NULL, NULL, 0, errp)) {
51+
return;
5352
}
5453
for (e = qdict_first(qdict); e; e = qdict_next(qdict, e)) {
55-
if (!object_property_set(obj, e->key, v, &local_err)) {
56-
break;
54+
if (!object_property_set(obj, e->key, v, errp)) {
55+
goto out;
5756
}
5857
}
59-
if (!local_err) {
60-
visit_check_struct(v, &local_err);
61-
}
62-
visit_end_struct(v, NULL);
63-
58+
visit_check_struct(v, errp);
6459
out:
65-
if (local_err) {
66-
error_propagate(errp, local_err);
67-
}
60+
visit_end_struct(v, NULL);
6861
}
6962

7063
void object_set_properties_from_keyval(Object *obj, const QDict *qdict,

0 commit comments

Comments
 (0)