[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v4 10/22] libqtest: Skip round-trip through QObj
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH v4 10/22] libqtest: Skip round-trip through QObject |
Date: |
Wed, 09 Aug 2017 12:10:20 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) |
Eric Blake <address@hidden> writes:
> When we don't have to do any % interpolation in qmp() and friends,
> there is no point wasting time allocating a QObject from the format
> string only to then format it back into the string we send over
> the wire.
True, but there's also no point in complicating things for efficiency
here.
> This is a temporary measure: it becomes important in the next
> patch, where test-qga will be refactored to do interpolation in
> place, and where we must not re-interpolate the string; but will
> go away when further refactoring makes it easier to directly
> output a string without going through qmp_fd_sendv().
Okay, let's see how that works out.
> Signed-off-by: Eric Blake <address@hidden>
> ---
> tests/libqtest.c | 16 ++++++++++++----
> 1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/tests/libqtest.c b/tests/libqtest.c
> index cde737ec5a..0cb439eefa 100644
> --- a/tests/libqtest.c
> +++ b/tests/libqtest.c
> @@ -448,7 +448,7 @@ QDict *qtest_qmp_receive(QTestState *s)
> */
> void qmp_fd_sendv(int fd, const char *fmt, va_list ap)
> {
> - QObject *qobj;
> + QObject *qobj = NULL;
> int log = getenv("QTEST_LOG") != NULL;
> QString *qstr;
> const char *str;
> @@ -462,9 +462,17 @@ void qmp_fd_sendv(int fd, const char *fmt, va_list ap)
> }
> assert(*fmt);
>
> - /* Going through qobject ensures we escape strings properly. */
> - qobj = qobject_from_jsonv(fmt, ap);
> - qstr = qobject_to_json(qobj);
> + /*
> + * A round trip through QObject is only needed if % interpolation
> + * is used. We interpolate through QObject rather than sprintf in
> + * order to escape strings properly.
> + */
> + if (strchr(fmt, '%')) {
> + qobj = qobject_from_jsonv(fmt, ap);
> + qstr = qobject_to_json(qobj);
> + } else {
qobj = NULL here would be clearer than the initializer.
> + qstr = qstring_from_str(fmt);
> + }
>
> /*
> * BUG: QMP doesn't react to input until it sees a newline, an
- [Qemu-devel] [PATCH v4 04/22] tests: Add assertion for no qmp(""), (continued)
- [Qemu-devel] [PATCH v4 04/22] tests: Add assertion for no qmp(""), Eric Blake, 2017/08/03
- [Qemu-devel] [PATCH v4 07/22] numa-test: Use hmp(), Eric Blake, 2017/08/03
- [Qemu-devel] [PATCH v4 08/22] qtest: Avoid passing raw strings through hmp(), Eric Blake, 2017/08/03
- [Qemu-devel] [PATCH v4 09/22] qtest: Document calling conventions, Eric Blake, 2017/08/03
- [Qemu-devel] [PATCH v4 06/22] qobject: Perform %% interpolation in qobject_from_jsonf(), Eric Blake, 2017/08/03
- [Qemu-devel] [PATCH v4 10/22] libqtest: Skip round-trip through QObject, Eric Blake, 2017/08/03
- Re: [Qemu-devel] [PATCH v4 10/22] libqtest: Skip round-trip through QObject,
Markus Armbruster <=
- [Qemu-devel] [PATCH v4 05/22] qobject: Simplify qobject_from_jsonv(), Eric Blake, 2017/08/03
- [Qemu-devel] [PATCH v4 12/22] libqtest: Change qmp_fd_send() to drop varargs, Eric Blake, 2017/08/03
- [Qemu-devel] [PATCH v4 11/22] test-qga: Simplify command construction, Eric Blake, 2017/08/03
- [Qemu-devel] [PATCH v4 13/22] libqtest: Add qmp_raw(), Eric Blake, 2017/08/03