All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Blake <eblake@redhat.com>
To: qemu-devel@nongnu.org
Cc: Michael Roth <mdroth@linux.vnet.ibm.com>,
	Alexander Graf <agraf@suse.de>,
	"open list:sPAPR pseries" <qemu-ppc@nongnu.org>,
	armbru@redhat.com, David Gibson <david@gibson.dropbear.id.au>
Subject: [Qemu-devel] [PATCH v8 18/35] qapi: Drop unused error argument for list and implicit struct
Date: Mon, 21 Dec 2015 10:08:23 -0700	[thread overview]
Message-ID: <1450717720-9627-19-git-send-email-eblake@redhat.com> (raw)
In-Reply-To: <1450717720-9627-1-git-send-email-eblake@redhat.com>

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 <eblake@redhat.com>

---
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

  parent reply	other threads:[~2015-12-21 17:09 UTC|newest]

Thread overview: 90+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-21 17:08 [Qemu-devel] [PATCH v8 00/35] qapi visitor cleanups (post-introspection cleanups subset E) Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 01/35] qobject: Document more shortcomings in our number handling Eric Blake
2016-01-05 14:07   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 02/35] qapi: Avoid use of misnamed DO_UPCAST() Eric Blake
2016-01-05 14:08   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 03/35] qapi: Drop dead dealloc visitor variable Eric Blake
2016-01-05 14:07   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 04/35] hmp: Improve use of qapi visitor Eric Blake
2016-01-05 14:06   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 05/35] vl: " Eric Blake
2016-01-05 14:06   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 06/35] balloon: " Eric Blake
2016-01-05 14:08   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 07/35] qapi: Improve generated event " Eric Blake
2016-01-05 14:07   ` Marc-André Lureau
2016-01-05 15:21     ` Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 08/35] qapi: Track all failures between visit_start/stop Eric Blake
2016-01-05 14:06   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 09/35] qapi: Prefer type_int64 over type_int in visitors Eric Blake
2016-01-05 14:07   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 10/35] qapi: Make all visitors supply uint64 callbacks Eric Blake
2016-01-05 14:07   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 11/35] qapi: Consolidate visitor small integer callbacks Eric Blake
2016-01-05 14:07   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 12/35] qapi: Don't cast Enum* to int* Eric Blake
2016-01-05 14:06   ` Marc-André Lureau
2016-01-05 15:23     ` Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 13/35] qom: Use typedef for Visitor Eric Blake
2016-01-05 14:07   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 14/35] qapi: Swap visit_* arguments for consistent 'name' placement Eric Blake
2016-01-05 14:06   ` Marc-André Lureau
2016-01-05 15:32     ` Eric Blake
2016-01-05 22:47       ` Eric Blake
2016-01-06  0:01   ` [Qemu-devel] [PATCH v8 14.5/35] qapi: Update docs to match recent generator changes Eric Blake
2016-01-06  0:16     ` Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 15/35] qom: Swap 'name' next to visitor in ObjectPropertyAccessor Eric Blake
2015-12-23 16:30   ` Eric Blake
2016-01-05 14:06     ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 16/35] qapi: Swap 'name' in visit_* callbacks to match public API Eric Blake
2016-01-05 14:05   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 17/35] qapi: Drop unused 'kind' for struct/enum visit Eric Blake
2016-01-05 14:05   ` Marc-André Lureau
2016-01-06  0:26   ` Eric Blake
2015-12-21 17:08 ` Eric Blake [this message]
2016-01-05 14:05   ` [Qemu-devel] [PATCH v8 18/35] qapi: Drop unused error argument for list and implicit struct Marc-André Lureau
2016-01-05 15:58     ` Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 19/35] qmp: Fix reference-counting of qnull on empty output visit Eric Blake
2016-01-05 14:05   ` Marc-André Lureau
2016-01-06 17:42     ` Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 20/35] qmp: Don't abuse stack to track qmp-output root Eric Blake
2016-01-05 14:05   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 21/35] qapi: Document visitor interfaces, add assertions Eric Blake
2016-01-05 14:05   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 22/35] qapi: Add visit_type_null() visitor Eric Blake
2016-01-05 14:05   ` Marc-André Lureau
2016-01-05 16:08     ` Eric Blake
2016-01-06 22:15   ` [Qemu-devel] [PATCH v8 22.5/35] qmp: Support explicit null on input visit Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 23/35] qmp: Tighten output visitor rules Eric Blake
2016-01-05 14:05   ` Marc-André Lureau
2016-01-06 22:18     ` Eric Blake
2016-01-06 22:40   ` [Qemu-devel] [PATCH v8 23.5/35] qmp: Tighten output visitor rules, part 2 Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 24/35] spapr_drc: Expose 'null' in qom-get when there is no fdt Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 25/35] qapi: Simplify excess input reporting in input visitors Eric Blake
2016-01-05 14:05   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 26/35] qapi: Add type.is_empty() helper Eric Blake
2016-01-05 14:04   ` Marc-André Lureau
2016-01-05 16:10     ` Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 27/35] qapi: Fix command with named empty argument type Eric Blake
2016-01-05 14:04   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 28/35] qapi: Eliminate empty visit_type_FOO_fields Eric Blake
2016-01-05 14:04   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 29/35] qapi: Canonicalize missing object to :empty Eric Blake
2015-12-23 17:54   ` [Qemu-devel] [PATCH v8 29.5/35] fixup! " Eric Blake
2016-01-05 14:03   ` [Qemu-devel] [PATCH v8 29/35] " Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 30/35] qapi-visit: Unify struct and union visit Eric Blake
2016-01-05 14:03   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 31/35] qapi: Rework deallocation of partial struct Eric Blake
2016-01-05 13:58   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 32/35] qapi: Split visit_end_struct() into pieces Eric Blake
2016-01-05 17:22   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 33/35] qapi: Simplify semantics of visit_next_list() Eric Blake
2016-01-05 17:22   ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 34/35] qapi: Change visit_type_FOO() to no longer return partial objects Eric Blake
2016-01-05 17:22   ` Marc-André Lureau
2016-01-05 18:02     ` Eric Blake
2016-01-07 23:02   ` [Qemu-devel] [PATCH v8 34/35] fixup! " Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 35/35] RFC: qapi: Adjust layout of FooList types Eric Blake
2016-01-05 17:22   ` Marc-André Lureau
2016-01-08 16:45   ` [Qemu-devel] [PATCH] qapi: Update docs to match recent generated changes, part 2 Eric Blake
2016-01-19  9:10 ` [Qemu-devel] [PATCH v8 00/35] qapi visitor cleanups (post-introspection cleanups subset E) Markus Armbruster

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1450717720-9627-19-git-send-email-eblake@redhat.com \
    --to=eblake@redhat.com \
    --cc=agraf@suse.de \
    --cc=armbru@redhat.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.