[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 23/26] qapi: Make input visitors detect unvis
From: |
Eric Blake |
Subject: |
Re: [Qemu-devel] [PATCH v2 23/26] qapi: Make input visitors detect unvisited list tails |
Date: |
Tue, 28 Feb 2017 10:09:46 -0600 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 |
On 02/26/2017 03:43 PM, Markus Armbruster wrote:
> Fix the design flaw demonstrated in the previous commit: new method
> check_list() lets input visitors report that unvisited input remains
> for a list, exactly like check_struct() lets them report that
> unvisited input remains for a struct or union.
>
> Implement the method for the qobject input visitor (straightforward),
> and the string input visitor (less so, due to the magic list syntax
> there). The opts visitor's list magic is even more impenetrable, and
> all I can do there today is a stub with a FIXME comment. No worse
> than before.
Yeah, I know what you mean (having worked on all three visitors in prior
patches). The opts visitor is just painful.
>
> Signed-off-by: Markus Armbruster <address@hidden>
> ---
>
> diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c
> index 2de6377..fe7b988 100644
> --- a/hw/ppc/spapr_drc.c
> +++ b/hw/ppc/spapr_drc.c
> @@ -326,6 +326,11 @@ static void prop_get_fdt(Object *obj, Visitor *v, const
> char *name,
> return;
> }
> }
> + visit_check_list(v, &err);
> + if (err) {
> + error_propagate(errp, err);
> + return;
> + }
> visit_end_list(v, NULL);
This doesn't look right. You want the visit_end_list() call to occur
unconditionally, even when visit_check_list() fails, so as to free any
resources allocated by the visitor.
> +++ b/tests/test-string-input-visitor.c
> @@ -160,17 +160,9 @@ static void test_visitor_in_intList(TestInputVisitorData
> *data,
> /* Would be simpler if the visitor genuinely supported virtual walks */
> visit_start_list(v, NULL, (GenericList **)&res, sizeof(*res),
> &error_abort);
> - tail = res;
> - visit_type_int64(v, NULL, &tail->value, &error_abort);
> - g_assert_cmpint(tail->value, ==, 0);
> - tail = (int64List *)visit_next_list(v, (GenericList *)tail,
> sizeof(*res));
> - g_assert(tail);
> - visit_type_int64(v, NULL, &tail->value, &error_abort);
> - g_assert_cmpint(tail->value, ==, 2);
> - tail = (int64List *)visit_next_list(v, (GenericList *)tail,
> sizeof(*res));
> - g_assert(tail);
> + visit_check_list(v, &err);
You are still calling visit_check_list() after a partial visit, but why
change from a 2/3 visit to a 0/3 visit?
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
- Re: [Qemu-devel] [PATCH v2 22/26] test-qobject-input-visitor: Cover missing nested struct member, (continued)
- [Qemu-devel] [PATCH v2 10/26] qapi: Clean up after commit 3d344c2, Markus Armbruster, 2017/02/26
- [Qemu-devel] [PATCH v2 04/26] qmp: Dumb down how we run QMP command registration, Markus Armbruster, 2017/02/26
- [Qemu-devel] [PATCH v2 19/26] test-string-input-visitor: Tear down existing test automatically, Markus Armbruster, 2017/02/26
- [Qemu-devel] [PATCH v2 12/26] qapi: Improve qobject input visitor error reporting, Markus Armbruster, 2017/02/26
- [Qemu-devel] [PATCH v2 23/26] qapi: Make input visitors detect unvisited list tails, Markus Armbruster, 2017/02/26
- Re: [Qemu-devel] [PATCH v2 23/26] qapi: Make input visitors detect unvisited list tails,
Eric Blake <=
- [Qemu-devel] [PATCH v2 18/26] tests-qobject-input-strict: Merge into test-qobject-input-visitor, Markus Armbruster, 2017/02/26
- [Qemu-devel] [PATCH v2 25/26] qapi: Fix object input visit beyond end of list, Markus Armbruster, 2017/02/26
- [Qemu-devel] [PATCH v2 06/26] qmp: Drop duplicated QMP command object checks, Markus Armbruster, 2017/02/26
- [Qemu-devel] [PATCH v2 26/26] qapi: Improve qobject visitor documentation, Markus Armbruster, 2017/02/26