From: Eric Blake <eblake@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: marcandre.lureau@redhat.com, qemu-devel@nongnu.org,
Michael Roth <mdroth@linux.vnet.ibm.com>
Subject: Re: [Qemu-devel] [PATCH v9 07/37] qapi: Improve generated event use of qapi visitor
Date: Wed, 20 Jan 2016 10:10:19 -0700 [thread overview]
Message-ID: <569FBF7B.6090408@redhat.com> (raw)
In-Reply-To: <87y4bks2g7.fsf@blackfin.pond.sub.org>
[-- Attachment #1: Type: text/plain, Size: 3943 bytes --]
On 01/20/2016 08:19 AM, Markus Armbruster wrote:
> Eric Blake <eblake@redhat.com> writes:
>
>> All other successful clients of visit_start_struct() were paired
>> with an unconditional visit_end_struct(); but the generated
>> code for events was relying on qmp_output_visitor_cleanup() to
>> work on an incomplete visit.
>
> Disgusting, isn't it? :)
This, along with the fix in 5/37, were the two places that had to be
fixed to avoid assertions in patch 24, when I turned on stricter
enforcing of cleanup only on an evenly matched visit.
>
>> Alter the code to guarantee that
>> the struct is completed, which will make a future patch to
>> split visit_end_struct() easier to reason about. While at it,
>> drop some assertions and comments that are not present in other
>> uses of the qmp output visitor, and pass NULL rather than "" as
>> the 'kind' parameter (matching most other uses where obj is NULL).
>>
>> Signed-off-by: Eric Blake <eblake@redhat.com>
>>
>> ---
>> v9: save churn in declaration order for later series on boxed params,
>> drop Marc-Andre's R-b
>> v8: no change
>> v7: place earlier in series, adjust handling of 'kind'
>> v6: new patch
>>
>> If desired, I can defer the hunk re-ordering the declaration of
>> obj to later in the series where it actually comes in handy.
Dead sentence leftover from v8; as mentioned above, I DID sink the
declaration reordering to a later series for v9. But it's after the
---, so it gets trimmed automatically by 'git am'.
>> ret += gen_err_check()
>> - ret += gen_visit_fields(arg_type.members, need_cast=True)
>> + ret += gen_visit_fields(arg_type.members, need_cast=True,
>> + label='out_obj')
>
> On error, we now go to out_obj rather than out. Some fields will be
> unvisited then (possibly all), and err will be set.
>
> Now I get to figure out what this change changes.
>
>> ret += mcgen('''
>> +out_obj:
>> visit_end_struct(v, &err);
>> if (err) {
>> goto out;
>> }
>
> Good: we actually call visit_end_struct() as we should.
>
> Not so good: if we get here via the error exit of gen_visit_fields(),
> err is set. If visit_end_struct() tries to set another error...
Oops. It all gets cleaned up in 33 when visit_end_struct() loses the
errp argument, but in the meantime, I think the most robust way to write
this would be:
out_obj:
visit_end_struct(v, err ? NULL : &err);
if (err) {
...
>
> I guess the idea is to go from gen_visit_fields() failure through
> visit_end_struct() here to out. Correct?
Yes.
>> +++ b/scripts/qapi.py
>> @@ -1636,7 +1636,8 @@ def gen_err_check(label='out', skiperr=False):
>> label=label)
>>
>>
>> -def gen_visit_fields(members, prefix='', need_cast=False, skiperr=False):
>> +def gen_visit_fields(members, prefix='', need_cast=False, skiperr=False,
>> + label='out'):
>
> Probably clearer than label=None, but duplicates gen_err_check()'s
> default. Fine with me.
>
>> ret = ''
>> if skiperr:
>> errparg = 'NULL'
> else:
> errparg = '&err'
>
> for memb in members:
> if memb.optional:
> ret += mcgen('''
> if (visit_optional(v, "%(name)s", &%(prefix)shas_%(c_name)s)) {
> ''',
> prefix=prefix, c_name=c_name(memb.name),
> name=memb.name, errp=errparg)
> push_indent()
>
> errp=errparg unused here. Not this patch's job to clean up.
Bah. Commit 5cdc8831 missed it, due to repeated refactoring. I'm a bit
surprised that pep8 didn't complain. Okay, I'm adding it as a separate
cleanup.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
next prev parent reply other threads:[~2016-01-20 17:10 UTC|newest]
Thread overview: 128+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-19 16:10 [Qemu-devel] [PATCH v9 00/37] qapi visitor cleanups (post-introspection cleanups subset E) Eric Blake
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 01/37] qobject: Document more shortcomings in our number handling Eric Blake
2016-01-20 9:02 ` Markus Armbruster
2016-01-20 15:55 ` Eric Blake
2016-01-21 6:21 ` Markus Armbruster
2016-01-21 17:12 ` Eric Blake
2016-01-21 17:29 ` Daniel P. Berrange
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 02/37] qapi: Avoid use of misnamed DO_UPCAST() Eric Blake
2016-01-20 10:04 ` Markus Armbruster
2016-01-20 15:59 ` Eric Blake
2016-01-21 6:22 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 03/37] qapi: Drop dead dealloc visitor variable Eric Blake
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 04/37] hmp: Improve use of qapi visitor Eric Blake
2016-01-20 13:05 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 05/37] vl: " Eric Blake
2016-01-20 13:43 ` Markus Armbruster
2016-01-20 16:18 ` Eric Blake
2016-01-21 6:45 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 06/37] balloon: " Eric Blake
2016-01-20 14:09 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 07/37] qapi: Improve generated event " Eric Blake
2016-01-20 15:19 ` Markus Armbruster
2016-01-20 17:10 ` Eric Blake [this message]
2016-01-21 7:16 ` Markus Armbruster
2016-01-26 23:40 ` Eric Blake
2016-01-28 22:51 ` Eric Blake
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 08/37] qapi: Track all failures between visit_start/stop Eric Blake
2016-01-20 16:03 ` Markus Armbruster
2016-01-20 17:15 ` Eric Blake
2016-01-21 7:19 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 09/37] qapi: Prefer type_int64 over type_int in visitors Eric Blake
2016-01-20 17:07 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 10/37] qapi: Make all visitors supply uint64 callbacks Eric Blake
2016-01-20 17:29 ` Markus Armbruster
2016-01-20 18:10 ` Eric Blake
2016-01-21 8:56 ` Markus Armbruster
2016-01-21 17:22 ` Eric Blake
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 11/37] qapi: Consolidate visitor small integer callbacks Eric Blake
2016-01-20 17:34 ` Markus Armbruster
2016-01-20 18:17 ` Eric Blake
2016-01-21 9:05 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 12/37] qapi: Don't cast Enum* to int* Eric Blake
2016-01-20 18:08 ` Markus Armbruster
2016-01-20 19:58 ` Eric Blake
2016-01-21 9:08 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 13/37] qom: Use typedef for Visitor Eric Blake
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 14/37] qapi: Swap visit_* arguments for consistent 'name' placement Eric Blake
2016-01-20 18:28 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 15/37] qom: Swap 'name' next to visitor in ObjectPropertyAccessor Eric Blake
2016-01-20 18:49 ` Markus Armbruster
2016-01-20 20:54 ` Eric Blake
2016-01-21 9:18 ` Markus Armbruster
2016-01-21 9:46 ` Kevin Wolf
2016-01-21 10:04 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 16/37] qapi: Swap 'name' in visit_* callbacks to match public API Eric Blake
2016-01-20 18:55 ` Markus Armbruster
2016-01-20 21:01 ` Eric Blake
2016-01-21 9:19 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 17/37] qapi: Drop unused 'kind' for struct/enum visit Eric Blake
2016-01-20 18:59 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 18/37] qapi: Drop unused error argument for list and implicit struct Eric Blake
2016-01-20 19:03 ` Markus Armbruster
2016-01-20 21:58 ` Eric Blake
2016-01-21 9:47 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 19/37] qmp: Fix reference-counting of qnull on empty output visit Eric Blake
2016-01-21 10:27 ` Markus Armbruster
2016-01-21 13:19 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 20/37] qmp: Don't abuse stack to track qmp-output root Eric Blake
2016-01-21 13:58 ` Markus Armbruster
2016-01-29 3:06 ` Eric Blake
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 21/37] qapi: Document visitor interfaces, add assertions Eric Blake
2016-01-21 20:08 ` Markus Armbruster
2016-01-22 0:30 ` Eric Blake
2016-01-22 12:18 ` Markus Armbruster
2016-02-10 0:23 ` Eric Blake
2016-02-10 7:38 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 22/37] qapi: Add visit_type_null() visitor Eric Blake
2016-01-22 17:00 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 23/37] qmp: Support explicit null during input visit Eric Blake
2016-01-22 17:12 ` Markus Armbruster
2016-02-01 23:52 ` Eric Blake
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 24/37] qmp: Tighten output visitor rules Eric Blake
2016-01-22 19:11 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 25/37] spapr_drc: Expose 'null' in qom-get when there is no fdt Eric Blake
2016-01-22 19:15 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 26/37] qapi: Simplify excess input reporting in input visitors Eric Blake
2016-01-22 19:24 ` Markus Armbruster
2016-01-22 19:37 ` Eric Blake
2016-01-25 9:27 ` Markus Armbruster
2016-01-25 10:43 ` Laszlo Ersek
2016-01-27 13:54 ` [Qemu-devel] [PATCH 0/3] qapi-visit: Unify struct and union visit Markus Armbruster
2016-01-27 13:54 ` [Qemu-devel] [PATCH 1/3] qapi-visit: Simplify how we visit common union members Markus Armbruster
2016-01-27 21:48 ` Eric Blake
2016-01-27 13:54 ` [Qemu-devel] [PATCH 2/3] qapi-visit: Clean up code generated around visit_end_union() Markus Armbruster
2016-01-27 14:02 ` Eric Blake
2016-01-27 14:46 ` Markus Armbruster
2016-01-27 13:54 ` [Qemu-devel] [PATCH 3/3] qapi-visit: Unify struct and union visit Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 27/37] qapi: Add type.is_empty() helper Eric Blake
2016-01-25 14:15 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 28/37] qapi: Fix command with named empty argument type Eric Blake
2016-01-25 15:03 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 29/37] qapi: Eliminate empty visit_type_FOO_fields Eric Blake
2016-01-25 17:04 ` Markus Armbruster
2016-02-17 4:57 ` Eric Blake
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 30/37] qapi: Canonicalize missing object to :empty Eric Blake
2016-01-25 19:04 ` Markus Armbruster
2016-01-26 16:29 ` Markus Armbruster
2016-01-27 8:00 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 31/37] qapi-visit: Unify struct and union visit Eric Blake
2016-01-27 14:12 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 32/37] qapi: Rework deallocation of partial struct Eric Blake
2016-01-27 16:41 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 33/37] qapi: Split visit_end_struct() into pieces Eric Blake
2016-01-27 17:20 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 34/37] qapi: Simplify semantics of visit_next_list() Eric Blake
2016-01-28 13:37 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 35/37] qapi: Change visit_type_FOO() to no longer return partial objects Eric Blake
2016-01-28 15:24 ` Markus Armbruster
2016-01-28 17:05 ` Eric Blake
2016-01-29 12:03 ` Markus Armbruster
2016-01-29 15:13 ` Eric Blake
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 36/37] RFC: qapi: Adjust layout of FooList types Eric Blake
2016-01-28 15:34 ` Markus Armbruster
2016-01-28 17:23 ` Eric Blake
2016-01-29 8:19 ` Markus Armbruster
2016-01-19 16:10 ` [Qemu-devel] [PATCH v9 37/37] qapi: Update docs to match recent generator changes Eric Blake
2016-01-28 15:37 ` Markus Armbruster
2016-01-28 17:56 ` [Qemu-devel] [PATCH v9 00/37] 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=569FBF7B.6090408@redhat.com \
--to=eblake@redhat.com \
--cc=armbru@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=qemu-devel@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).