From: Eric Blake <eblake@redhat.com>
To: Markus Armbruster <armbru@redhat.com>, qemu-devel@nongnu.org
Cc: mdroth@linux.vnet.ibm.com
Subject: Re: [Qemu-devel] [PATCH v6 20/26] qapi: Fix output visitor to return qnull() instead of NULL
Date: Fri, 11 Sep 2015 15:01:15 -0600 [thread overview]
Message-ID: <55F3411B.5070905@redhat.com> (raw)
In-Reply-To: <55F33D06.1090103@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 2177 bytes --]
On 09/11/2015 02:43 PM, Eric Blake wrote:
>> +++ b/tests/test-qmp-output-visitor.c
>> @@ -485,7 +485,7 @@ static void test_visitor_out_empty(TestOutputVisitorData *data,
>> QObject *arg;
>>
>> arg = qmp_output_get_qobject(data->qov);
>> - g_assert(!arg);
>> + g_assert(qobject_type(arg) == QTYPE_QNULL);
>> }
>
> Missing
> qobject_decref(arg);
>
> Ultimately, the global qnull_ starts life with refcnt 1, and after this
> test should be back to 1. But it is coming back as 3, so even with a
> qobject_decref, that would get it back down to 2. So we are leaking a
> reference to qnull somewhere.
>
> I'm still investigating, and may be able to find the patch
Squash this in, and you can have:
Reviewed-by: Eric Blake <eblake@redhat.com>
diff --git i/qapi/qmp-output-visitor.c w/qapi/qmp-output-visitor.c
index 2d6083e..b96849e 100644
--- i/qapi/qmp-output-visitor.c
+++ w/qapi/qmp-output-visitor.c
@@ -66,11 +66,7 @@ static QObject *qmp_output_first(QmpOutputVisitor *qov)
{
QStackEntry *e = QTAILQ_LAST(&qov->stack, QStack);
- if (!e) {
- return qnull();
- }
-
- return e->value;
+ return e ? e->value : NULL;
}
static QObject *qmp_output_last(QmpOutputVisitor *qov)
@@ -190,6 +186,8 @@ QObject *qmp_output_get_qobject(QmpOutputVisitor *qov)
QObject *obj = qmp_output_first(qov);
if (obj) {
qobject_incref(obj);
+ } else {
+ obj = qnull();
}
return obj;
}
diff --git i/tests/test-qmp-output-visitor.c
w/tests/test-qmp-output-visitor.c
index 256bffd..8bd48f4 100644
--- i/tests/test-qmp-output-visitor.c
+++ w/tests/test-qmp-output-visitor.c
@@ -486,6 +486,9 @@ static void
test_visitor_out_empty(TestOutputVisitorData *data,
arg = qmp_output_get_qobject(data->qov);
g_assert(qobject_type(arg) == QTYPE_QNULL);
+ /* Check that qnull reference counting is sane */
+ g_assert(arg->refcnt == 2);
+ qobject_decref(arg);
}
static void init_native_list(UserDefNativeListUnion *cvalue)
--
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:[~2015-09-11 21:01 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-11 19:17 [Qemu-devel] [PATCH v6 00/26] qapi: QMP introspection Markus Armbruster
2015-09-11 19:17 ` [Qemu-devel] [PATCH v6 01/26] qapi: Rename class QAPISchema to QAPISchemaParser Markus Armbruster
2015-09-11 19:17 ` [Qemu-devel] [PATCH v6 02/26] qapi: New QAPISchema intermediate reperesentation Markus Armbruster
2015-09-11 19:17 ` [Qemu-devel] [PATCH v6 03/26] qapi: QAPISchema code generation helper methods Markus Armbruster
2015-09-11 19:17 ` [Qemu-devel] [PATCH v6 04/26] qapi: New QAPISchemaVisitor Markus Armbruster
2015-09-11 19:17 ` [Qemu-devel] [PATCH v6 05/26] tests/qapi-schema: Convert test harness to QAPISchemaVisitor Markus Armbruster
2015-09-11 19:17 ` [Qemu-devel] [PATCH v6 06/26] qapi-types: Convert to QAPISchemaVisitor, fixing flat unions Markus Armbruster
2015-09-11 19:17 ` [Qemu-devel] [PATCH v6 07/26] qapi-visit: Convert to QAPISchemaVisitor, fixing bugs Markus Armbruster
2015-09-11 19:17 ` [Qemu-devel] [PATCH v6 08/26] qapi-commands: Convert to QAPISchemaVisitor Markus Armbruster
2015-09-11 19:17 ` [Qemu-devel] [PATCH v6 09/26] qapi: De-duplicate enum code generation Markus Armbruster
2015-09-11 19:17 ` [Qemu-devel] [PATCH v6 10/26] qapi-event: Eliminate global variable event_enum_value Markus Armbruster
2015-09-11 19:17 ` [Qemu-devel] [PATCH v6 11/26] qapi-event: Convert to QAPISchemaVisitor, fixing data with base Markus Armbruster
2015-09-11 19:17 ` [Qemu-devel] [PATCH v6 12/26] qapi: Replace dirty is_c_ptr() by method c_null() Markus Armbruster
2015-09-11 19:17 ` [Qemu-devel] [PATCH v6 13/26] qapi: Clean up after recent conversions to QAPISchemaVisitor Markus Armbruster
2015-09-11 19:17 ` [Qemu-devel] [PATCH v6 14/26] qapi-visit: Rearrange code a bit Markus Armbruster
2015-09-11 19:17 ` [Qemu-devel] [PATCH v6 15/26] qapi-commands: Rearrange code Markus Armbruster
2015-09-11 19:17 ` [Qemu-devel] [PATCH v6 16/26] qapi: Rename qmp_marshal_input_FOO() to qmp_marshal_FOO() Markus Armbruster
2015-09-11 19:18 ` [Qemu-devel] [PATCH v6 17/26] qapi: De-duplicate parameter list generation Markus Armbruster
2015-09-11 19:18 ` [Qemu-devel] [PATCH v6 18/26] qapi-commands: De-duplicate output marshaling functions Markus Armbruster
2015-09-11 19:18 ` [Qemu-devel] [PATCH v6 19/26] qapi: Improve built-in type documentation Markus Armbruster
2015-09-11 19:18 ` [Qemu-devel] [PATCH v6 20/26] qapi: Fix output visitor to return qnull() instead of NULL Markus Armbruster
2015-09-11 20:43 ` Eric Blake
2015-09-11 21:01 ` Eric Blake [this message]
2015-09-12 8:10 ` Markus Armbruster
2015-09-12 12:16 ` Eric Blake
2015-09-12 13:42 ` Eric Blake
2015-09-12 13:55 ` Eric Blake
2015-09-12 14:11 ` Markus Armbruster
2015-09-12 14:17 ` Eric Blake
2015-09-11 19:18 ` [Qemu-devel] [PATCH v6 21/26] qapi: Introduce a first class 'any' type Markus Armbruster
2015-09-11 19:18 ` [Qemu-devel] [PATCH v6 22/26] qom: Don't use 'gen': false for qom-get, qom-set, object-add Markus Armbruster
2015-09-11 19:18 ` [Qemu-devel] [PATCH v6 23/26] qapi-schema: Fix up misleading specification of netdev_add Markus Armbruster
2015-09-11 19:18 ` [Qemu-devel] [PATCH v6 24/26] qapi: Pseudo-type '**' is now unused, drop it Markus Armbruster
2015-09-11 19:18 ` [Qemu-devel] [PATCH v6 25/26] qapi: New QMP command query-qmp-schema for QMP introspection Markus Armbruster
2015-09-11 19:18 ` [Qemu-devel] [PATCH v6 26/26] qapi-introspect: Hide type names 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=55F3411B.5070905@redhat.com \
--to=eblake@redhat.com \
--cc=armbru@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 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.