From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49745) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aGSEw-000702-1X for qemu-devel@nongnu.org; Tue, 05 Jan 2016 09:05:38 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aGSEt-0000LX-Ux for qemu-devel@nongnu.org; Tue, 05 Jan 2016 09:05:33 -0500 MIME-Version: 1.0 In-Reply-To: <1450717720-9627-19-git-send-email-eblake@redhat.com> References: <1450717720-9627-1-git-send-email-eblake@redhat.com> <1450717720-9627-19-git-send-email-eblake@redhat.com> Date: Tue, 5 Jan 2016 15:05:31 +0100 Message-ID: From: =?UTF-8?B?TWFyYy1BbmRyw6kgTHVyZWF1?= Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v8 18/35] qapi: Drop unused error argument for list and implicit struct List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eric Blake Cc: Michael Roth , Markus Armbruster , Alexander Graf , QEMU , "open list:sPAPR pseries" , David Gibson Hi On Mon, Dec 21, 2015 at 6:08 PM, Eric Blake wrote: > No backend was setting an error when ending the visit of a list > or implicit struct. Make the callers a bit easier to follow by > making this a part of the contract, and removing the errp > argument - callers can then unconditionally end an object as > part of cleanup without having to think about whether a second > error is dominated by a first, because there is no second error. > > A later patch will then tackle the larger task of splitting > visit_end_struct(), which can indeed set an error. > > Signed-off-by: Eric Blake > This patch makes visit_end_list() possibly abort, while before it would pass the error to upper. I assume that's what you are going to change next. Reviewed-by: Marc-Andr=C3=A9 Lureau > --- > v8: no change > v7: place earlier in series, rebase to earlier changes > v6: new patch, split from RFC on v5 7/46 > --- > hw/ppc/spapr_drc.c | 6 +----- > include/qapi/visitor-impl.h | 6 ++++-- > include/qapi/visitor.h | 5 +++-- > qapi/opts-visitor.c | 2 +- > qapi/qapi-dealloc-visitor.c | 4 ++-- > qapi/qapi-visit-core.c | 8 ++++---- > qapi/qmp-input-visitor.c | 9 ++------- > qapi/qmp-output-visitor.c | 2 +- > qapi/string-input-visitor.c | 2 +- > qapi/string-output-visitor.c | 2 +- > scripts/qapi-visit.py | 10 +++------- > 11 files changed, 23 insertions(+), 33 deletions(-) > > diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c > index c00e9da..18a4225 100644 > --- a/hw/ppc/spapr_drc.c > +++ b/hw/ppc/spapr_drc.c > @@ -314,11 +314,7 @@ static void prop_get_fdt(Object *obj, Visitor *v, co= nst char *name, > return; > } > } > - visit_end_list(v, &err); > - if (err) { > - error_propagate(errp, err); > - return; > - } > + visit_end_list(v); > break; > } > default: > diff --git a/include/qapi/visitor-impl.h b/include/qapi/visitor-impl.h > index ac22964..32d6725 100644 > --- a/include/qapi/visitor-impl.h > +++ b/include/qapi/visitor-impl.h > @@ -24,11 +24,13 @@ struct Visitor > > void (*start_implicit_struct)(Visitor *v, void **obj, size_t size, > Error **errp); > - void (*end_implicit_struct)(Visitor *v, Error **errp); > + /* May be NULL */ > + void (*end_implicit_struct)(Visitor *v); > > void (*start_list)(Visitor *v, const char *name, Error **errp); > GenericList *(*next_list)(Visitor *v, GenericList **list, Error **er= rp); > - void (*end_list)(Visitor *v, Error **errp); > + /* Must be set */ > + void (*end_list)(Visitor *v); > > void (*type_enum)(Visitor *v, const char *name, int *obj, > const char *const strings[], Error **errp); > diff --git a/include/qapi/visitor.h b/include/qapi/visitor.h > index 4abc180..10390d2 100644 > --- a/include/qapi/visitor.h > +++ b/include/qapi/visitor.h > @@ -32,10 +32,11 @@ void visit_start_struct(Visitor *v, const char *name,= void **obj, > void visit_end_struct(Visitor *v, Error **errp); > void visit_start_implicit_struct(Visitor *v, void **obj, size_t size, > Error **errp); > -void visit_end_implicit_struct(Visitor *v, Error **errp); > +void visit_end_implicit_struct(Visitor *v); > + > void visit_start_list(Visitor *v, const char *name, Error **errp); > GenericList *visit_next_list(Visitor *v, GenericList **list, Error **err= p); > -void visit_end_list(Visitor *v, Error **errp); > +void visit_end_list(Visitor *v); > > /** > * Check if an optional member @name of an object needs visiting. > diff --git a/qapi/opts-visitor.c b/qapi/opts-visitor.c > index 6d4a91e..62ffdd4 100644 > --- a/qapi/opts-visitor.c > +++ b/qapi/opts-visitor.c > @@ -269,7 +269,7 @@ opts_next_list(Visitor *v, GenericList **list, Error = **errp) > > > static void > -opts_end_list(Visitor *v, Error **errp) > +opts_end_list(Visitor *v) > { > OptsVisitor *ov =3D to_ov(v); > > diff --git a/qapi/qapi-dealloc-visitor.c b/qapi/qapi-dealloc-visitor.c > index 49e7cf0..560feb3 100644 > --- a/qapi/qapi-dealloc-visitor.c > +++ b/qapi/qapi-dealloc-visitor.c > @@ -83,7 +83,7 @@ static void qapi_dealloc_start_implicit_struct(Visitor = *v, > qapi_dealloc_push(qov, obj); > } > > -static void qapi_dealloc_end_implicit_struct(Visitor *v, Error **errp) > +static void qapi_dealloc_end_implicit_struct(Visitor *v) > { > QapiDeallocVisitor *qov =3D to_qov(v); > void **obj =3D qapi_dealloc_pop(qov); > @@ -119,7 +119,7 @@ static GenericList *qapi_dealloc_next_list(Visitor *v= , GenericList **listp, > return NULL; > } > > -static void qapi_dealloc_end_list(Visitor *v, Error **errp) > +static void qapi_dealloc_end_list(Visitor *v) > { > QapiDeallocVisitor *qov =3D to_qov(v); > void *obj =3D qapi_dealloc_pop(qov); > diff --git a/qapi/qapi-visit-core.c b/qapi/qapi-visit-core.c > index b0452cf..2d3743b 100644 > --- a/qapi/qapi-visit-core.c > +++ b/qapi/qapi-visit-core.c > @@ -37,10 +37,10 @@ void visit_start_implicit_struct(Visitor *v, void **o= bj, size_t size, > } > } > > -void visit_end_implicit_struct(Visitor *v, Error **errp) > +void visit_end_implicit_struct(Visitor *v) > { > if (v->end_implicit_struct) { > - v->end_implicit_struct(v, errp); > + v->end_implicit_struct(v); > } > } > > @@ -54,9 +54,9 @@ GenericList *visit_next_list(Visitor *v, GenericList **= list, Error **errp) > return v->next_list(v, list, errp); > } > > -void visit_end_list(Visitor *v, Error **errp) > +void visit_end_list(Visitor *v) > { > - v->end_list(v, errp); > + v->end_list(v); > } > > bool visit_start_union(Visitor *v, bool data_present, Error **errp) > diff --git a/qapi/qmp-input-visitor.c b/qapi/qmp-input-visitor.c > index bf25249..597652c 100644 > --- a/qapi/qmp-input-visitor.c > +++ b/qapi/qmp-input-visitor.c > @@ -153,10 +153,6 @@ static void qmp_input_start_implicit_struct(Visitor = *v, void **obj, > } > } > > -static void qmp_input_end_implicit_struct(Visitor *v, Error **errp) > -{ > -} > - > static void qmp_input_start_list(Visitor *v, const char *name, Error **e= rrp) > { > QmpInputVisitor *qiv =3D to_qiv(v); > @@ -201,11 +197,11 @@ static GenericList *qmp_input_next_list(Visitor *v,= GenericList **list, > return entry; > } > > -static void qmp_input_end_list(Visitor *v, Error **errp) > +static void qmp_input_end_list(Visitor *v) > { > QmpInputVisitor *qiv =3D to_qiv(v); > > - qmp_input_pop(qiv, errp); > + qmp_input_pop(qiv, &error_abort); > } > > static void qmp_input_get_next_type(Visitor *v, const char *name, QType = *type, > @@ -352,7 +348,6 @@ QmpInputVisitor *qmp_input_visitor_new(QObject *obj) > v->visitor.start_struct =3D qmp_input_start_struct; > v->visitor.end_struct =3D qmp_input_end_struct; > v->visitor.start_implicit_struct =3D qmp_input_start_implicit_struct= ; > - v->visitor.end_implicit_struct =3D qmp_input_end_implicit_struct; > v->visitor.start_list =3D qmp_input_start_list; > v->visitor.next_list =3D qmp_input_next_list; > v->visitor.end_list =3D qmp_input_end_list; > diff --git a/qapi/qmp-output-visitor.c b/qapi/qmp-output-visitor.c > index db5e618..d367148 100644 > --- a/qapi/qmp-output-visitor.c > +++ b/qapi/qmp-output-visitor.c > @@ -151,7 +151,7 @@ static GenericList *qmp_output_next_list(Visitor *v, = GenericList **listp, > return list ? list->next : NULL; > } > > -static void qmp_output_end_list(Visitor *v, Error **errp) > +static void qmp_output_end_list(Visitor *v) > { > QmpOutputVisitor *qov =3D to_qov(v); > qmp_output_pop(qov); > diff --git a/qapi/string-input-visitor.c b/qapi/string-input-visitor.c > index 5347b61..610c233 100644 > --- a/qapi/string-input-visitor.c > +++ b/qapi/string-input-visitor.c > @@ -178,7 +178,7 @@ next_list(Visitor *v, GenericList **list, Error **err= p) > } > > static void > -end_list(Visitor *v, Error **errp) > +end_list(Visitor *v) > { > StringInputVisitor *siv =3D to_siv(v); > siv->head =3D true; > diff --git a/qapi/string-output-visitor.c b/qapi/string-output-visitor.c > index 74de6b6..fd917a4 100644 > --- a/qapi/string-output-visitor.c > +++ b/qapi/string-output-visitor.c > @@ -303,7 +303,7 @@ next_list(Visitor *v, GenericList **list, Error **err= p) > } > > static void > -end_list(Visitor *v, Error **errp) > +end_list(Visitor *v) > { > StringOutputVisitor *sov =3D to_sov(v); > > diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py > index 8a741b6..573bb81 100644 > --- a/scripts/qapi-visit.py > +++ b/scripts/qapi-visit.py > @@ -62,7 +62,7 @@ static void visit_type_implicit_%(c_type)s(Visitor *v, = %(c_type)s **obj, Error * > visit_start_implicit_struct(v, (void **)obj, sizeof(%(c_type)s), &er= r); > if (!err) { > visit_type_%(c_type)s_fields(v, obj, errp); > - visit_end_implicit_struct(v, &err); > + visit_end_implicit_struct(v); > } > error_propagate(errp, err); > } > @@ -167,9 +167,7 @@ void visit_type_%(c_name)s(Visitor *v, const char *na= me, %(c_name)s **obj, Error > visit_type_%(c_elt_type)s(v, NULL, &native_i->value, &err); > } > > - error_propagate(errp, err); > - err =3D NULL; > - visit_end_list(v, &err); > + visit_end_list(v); > out: > error_propagate(errp, err); > } > @@ -230,9 +228,7 @@ void visit_type_%(c_name)s(Visitor *v, const char *na= me, %(c_name)s **obj, Error > "%(name)s"); > } > out_obj: > - error_propagate(errp, err); > - err =3D NULL; > - visit_end_implicit_struct(v, &err); > + visit_end_implicit_struct(v); > out: > error_propagate(errp, err); > } > -- > 2.4.3 > > --=20 Marc-Andr=C3=A9 Lureau