qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v8 18/35] qapi: Drop unused error argument for l


From: Marc-André Lureau
Subject: Re: [Qemu-devel] [PATCH v8 18/35] qapi: Drop unused error argument for list and implicit struct
Date: Tue, 5 Jan 2016 15:05:31 +0100

Hi

On Mon, Dec 21, 2015 at 6:08 PM, Eric Blake <address@hidden> 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 <address@hidden>
>

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é Lureau <address@hidden>

> ---
> 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, const 
> 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 **errp);
> -    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 **errp);
> -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 = 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 = to_qov(v);
>      void **obj = 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 = to_qov(v);
>      void *obj = 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 **obj, 
> 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 **errp)
>  {
>      QmpInputVisitor *qiv = 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 = 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 = qmp_input_start_struct;
>      v->visitor.end_struct = qmp_input_end_struct;
>      v->visitor.start_implicit_struct = qmp_input_start_implicit_struct;
> -    v->visitor.end_implicit_struct = qmp_input_end_implicit_struct;
>      v->visitor.start_list = qmp_input_start_list;
>      v->visitor.next_list = qmp_input_next_list;
>      v->visitor.end_list = 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 = 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 **errp)
>  }
>
>  static void
> -end_list(Visitor *v, Error **errp)
> +end_list(Visitor *v)
>  {
>      StringInputVisitor *siv = to_siv(v);
>      siv->head = 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 **errp)
>  }
>
>  static void
> -end_list(Visitor *v, Error **errp)
> +end_list(Visitor *v)
>  {
>      StringOutputVisitor *sov = 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), &err);
>      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 *name, 
> %(c_name)s **obj, Error
>          visit_type_%(c_elt_type)s(v, NULL, &native_i->value, &err);
>      }
>
> -    error_propagate(errp, err);
> -    err = 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 *name, 
> %(c_name)s **obj, Error
>                     "%(name)s");
>      }
>  out_obj:
> -    error_propagate(errp, err);
> -    err = NULL;
> -    visit_end_implicit_struct(v, &err);
> +    visit_end_implicit_struct(v);
>  out:
>      error_propagate(errp, err);
>  }
> --
> 2.4.3
>
>



-- 
Marc-André Lureau



reply via email to

[Prev in Thread] Current Thread [Next in Thread]