mirror of https://github.com/xemu-project/xemu.git
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:
parent
ee8a1c63d3
commit
dbc8221f8c
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Reference in New Issue