summary refs log tree commit diff stats
path: root/scripts/qapi/commands.py
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2020-07-10 14:41:23 +0100
committerPeter Maydell <peter.maydell@linaro.org>2020-07-10 14:41:23 +0100
commitf2a1cf9180f63e88bb38ff21c169da97c3f2bad5 (patch)
treeb7582f17ac7fb572a23b02bfdac638d19d780d48 /scripts/qapi/commands.py
parentb6d7e9b66f59ca6ebc6e9b830cd5e7bf849d31cf (diff)
parent1de7096d8378a57e2d75d9cacc9a119e7e41640d (diff)
downloadfocaccia-qemu-f2a1cf9180f63e88bb38ff21c169da97c3f2bad5.tar.gz
focaccia-qemu-f2a1cf9180f63e88bb38ff21c169da97c3f2bad5.zip
Merge remote-tracking branch 'remotes/armbru/tags/pull-error-2020-07-07-v2' into staging
Error reporting patches patches for 2020-07-07

# gpg: Signature made Fri 10 Jul 2020 14:24:42 BST
# gpg:                using RSA key 354BC8B3D7EB2A6B68674E5F3870B400EB918653
# gpg:                issuer "armbru@redhat.com"
# gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" [full]
# gpg:                 aka "Markus Armbruster <armbru@pond.sub.org>" [full]
# Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867  4E5F 3870 B400 EB91 8653

* remotes/armbru/tags/pull-error-2020-07-07-v2: (53 commits)
  xen: Use ERRP_GUARD()
  nbd: Use ERRP_GUARD()
  virtio-9p: Use ERRP_GUARD()
  fw_cfg: Use ERRP_GUARD()
  pflash: Use ERRP_GUARD()
  sd: Use ERRP_GUARD()
  scripts: Coccinelle script to use ERRP_GUARD()
  error: New macro ERRP_GUARD()
  hmp: Ignore Error objects where the return value suffices
  qdev: Ignore Error objects where the return value suffices
  qemu-img: Ignore Error objects where the return value suffices
  error: Avoid error_propagate() after migrate_add_blocker()
  qapi: Purge error_propagate() from QAPI core
  qapi: Smooth visitor error checking in generated code
  qapi: Smooth another visitor error checking pattern
  block/parallels: Simplify parallels_open() after previous commit
  error: Reduce unnecessary error propagation
  error: Eliminate error_propagate() manually
  error: Eliminate error_propagate() with Coccinelle, part 2
  error: Eliminate error_propagate() with Coccinelle, part 1
  ...

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'scripts/qapi/commands.py')
-rw-r--r--scripts/qapi/commands.py22
1 files changed, 9 insertions, 13 deletions
diff --git a/scripts/qapi/commands.py b/scripts/qapi/commands.py
index 6809b0fb6e..3cf9e1110b 100644
--- a/scripts/qapi/commands.py
+++ b/scripts/qapi/commands.py
@@ -47,6 +47,7 @@ def gen_call(name, arg_type, boxed, ret_type):
     ret = mcgen('''
 
     %(lhs)sqmp_%(c_name)s(%(args)s&err);
+    error_propagate(errp, err);
 ''',
                 c_name=c_name(name), args=argstr, lhs=lhs)
     if ret_type:
@@ -55,7 +56,7 @@ def gen_call(name, arg_type, boxed, ret_type):
         goto out;
     }
 
-    qmp_marshal_output_%(c_name)s(retval, ret, &err);
+    qmp_marshal_output_%(c_name)s(retval, ret, errp);
 ''',
                      c_name=ret_type.c_name())
     return ret
@@ -66,15 +67,12 @@ def gen_marshal_output(ret_type):
 
 static void qmp_marshal_output_%(c_name)s(%(c_type)s ret_in, QObject **ret_out, Error **errp)
 {
-    Error *err = NULL;
     Visitor *v;
 
     v = qobject_output_visitor_new(ret_out);
-    visit_type_%(c_name)s(v, "unused", &ret_in, &err);
-    if (!err) {
+    if (visit_type_%(c_name)s(v, "unused", &ret_in, errp)) {
         visit_complete(v, ret_out);
     }
-    error_propagate(errp, err);
     visit_free(v);
     v = qapi_dealloc_visitor_new();
     visit_type_%(c_name)s(v, "unused", &ret_in, NULL);
@@ -104,6 +102,7 @@ def gen_marshal(name, arg_type, boxed, ret_type):
 %(proto)s
 {
     Error *err = NULL;
+    bool ok = false;
     Visitor *v;
 ''',
                 proto=build_marshal_proto(name))
@@ -123,28 +122,26 @@ def gen_marshal(name, arg_type, boxed, ret_type):
     ret += mcgen('''
 
     v = qobject_input_visitor_new(QOBJECT(args));
-    visit_start_struct(v, NULL, NULL, 0, &err);
-    if (err) {
+    if (!visit_start_struct(v, NULL, NULL, 0, errp)) {
         goto out;
     }
 ''')
 
     if have_args:
         ret += mcgen('''
-    visit_type_%(c_arg_type)s_members(v, &arg, &err);
-    if (!err) {
-        visit_check_struct(v, &err);
+    if (visit_type_%(c_arg_type)s_members(v, &arg, errp)) {
+        ok = visit_check_struct(v, errp);
     }
 ''',
                      c_arg_type=arg_type.c_name())
     else:
         ret += mcgen('''
-    visit_check_struct(v, &err);
+    ok = visit_check_struct(v, errp);
 ''')
 
     ret += mcgen('''
     visit_end_struct(v, NULL);
-    if (err) {
+    if (!ok) {
         goto out;
     }
 ''')
@@ -154,7 +151,6 @@ def gen_marshal(name, arg_type, boxed, ret_type):
     ret += mcgen('''
 
 out:
-    error_propagate(errp, err);
     visit_free(v);
 ''')