qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Stefan Hajnoczi <stefanha@redhat.com>
To: Max Reitz <mreitz@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
	Stefan Hajnoczi <stefanha@gmail.com>, Fam Zheng <famz@redhat.com>,
	qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v6 04/22] qapi: extend qdict_flatten() for QLists
Date: Thu, 2 Jan 2014 12:01:21 +0800	[thread overview]
Message-ID: <20140102040121.GA17904@stefanha-thinkpad.redhat.com> (raw)
In-Reply-To: <52B47D0E.50906@redhat.com>

On Fri, Dec 20, 2013 at 06:23:26PM +0100, Max Reitz wrote:
> On 20.12.2013 18:19, Max Reitz wrote:
> >On 20.12.2013 10:46, Stefan Hajnoczi wrote:
> >>>diff --git a/qobject/qdict.c b/qobject/qdict.c
> >>>index fca1902..7b6b08a 100644
> >>>--- a/qobject/qdict.c
> >>>+++ b/qobject/qdict.c
> >>>@@ -477,7 +477,46 @@ static void qdict_destroy_obj(QObject *obj)
> >>>      g_free(qdict);
> >>>  }
> >>>  -static void qdict_do_flatten(QDict *qdict, QDict *target,
> >>>const char *prefix)
> >>>+static void qdict_flatten_qdict(QDict *qdict, QDict *target,
> >>>+                                const char *prefix);
> >>>+
> >>>+static void qdict_flatten_qlist(QList *qlist, QDict *target,
> >>>const char *prefix)
> >>>+{
> >>>+    QObject *value;
> >>>+    const QListEntry *entry;
> >>>+    char *new_key;
> >>>+    int i;
> >>>+
> >>>+    /* This function is never called with prefix == NULL,
> >>>i.e., it is always
> >>>+     * called from within qdict_flatten_q(list|dict)().
> >>>Therefore, it does not
> >>>+     * need to remove list entries during the iteration (the
> >>>whole list will be
> >>>+     * deleted eventually anyway from qdict_flatten_qdict()). */
> >>>+    assert(prefix);
> >>>+
> >>>+    entry = qlist_first(qlist);
> >>>+
> >>>+    for (i = 0; entry; entry = qlist_next(entry), i++) {
> >>>+        value = qlist_entry_obj(entry);
> >>>+
> >>>+        qobject_incref(value);
> >>>+        new_key = g_strdup_printf("%s.%i", prefix, i);
> >>>+        qdict_put_obj(target, new_key, value);
> >>It seems this operation is clobbered by what follows and should be
> >>deleted.  Is the incref also superfluous or...
> >>
> >>>+
> >>>+        if (qobject_type(value) == QTYPE_QDICT) {
> >>>+            qdict_flatten_qdict(qobject_to_qdict(value),
> >>>target, new_key);
> >>>+        } else if (qobject_type(value) == QTYPE_QLIST) {
> >>>+            qdict_flatten_qlist(qobject_to_qlist(value),
> >>>target, new_key);
> >>>+        } else {
> >>>+            /* All other types are moved to the target unchanged. */
> >>>+            qobject_incref(value);
> >>...should this one be deleted?
> >
> >Oh great, I've been fixing working code, then. *g*
> >
> >I added the else branch in v5, I guess, it was correct not to have
> >it (however, the condition in the else if was missing in v4). I'll
> >drop it again, thanks.
> 
> On second thought, that would be even more wrong. I'll leave the
> else branch and drop the qobject_incref() and qdict_put_obj() above
> the condition.

I agree, that sounds like the right solution.

  reply	other threads:[~2014-01-02  4:09 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-19 19:47 [Qemu-devel] [PATCH v6 00/22] blkdebug/blkverify: Allow QMP configuration Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 01/22] blkdebug: Use errp for read_config() Max Reitz
2013-12-19 20:21   ` Eric Blake
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 02/22] blkdebug: Don't require sophisticated filename Max Reitz
2013-12-19 20:56   ` Eric Blake
2013-12-19 20:58     ` Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 03/22] qdict: Add qdict_array_split() Max Reitz
2013-12-19 21:20   ` Eric Blake
2013-12-20  9:38   ` Stefan Hajnoczi
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 04/22] qapi: extend qdict_flatten() for QLists Max Reitz
2013-12-19 21:49   ` Eric Blake
2013-12-20  9:46   ` Stefan Hajnoczi
2013-12-20 17:19     ` Max Reitz
2013-12-20 17:23       ` Max Reitz
2014-01-02  4:01         ` Stefan Hajnoczi [this message]
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 05/22] qemu-option: Add qemu_config_parse_qdict() Max Reitz
2013-12-19 22:15   ` Eric Blake
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 06/22] blkdebug: Always call read_config() Max Reitz
2013-12-19 23:06   ` Eric Blake
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 07/22] blkdebug: Use command-line in read_config() Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 08/22] block: Allow reference for bdrv_file_open() Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 09/22] block: Pass reference to bdrv_file_open() Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 10/22] block: Allow block devices without files Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 11/22] block: Add bdrv_open_image() Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 12/22] block: Use bdrv_open_image() in bdrv_open() Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 13/22] block: Allow recursive "file"s Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 14/22] blockdev: Move "file" to legacy_opts Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 15/22] blkdebug: Allow command-line file configuration Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 16/22] blkverify: Allow command-line configuration Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 17/22] blkverify: Don't require protocol filename Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 18/22] qapi: Add "errno" to the list of polluted words Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 19/22] qapi: QMP interface for blkdebug and blkverify Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 20/22] qemu-io: Make filename optional Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 21/22] iotests: Test new blkdebug/blkverify interface Max Reitz
2013-12-19 19:47 ` [Qemu-devel] [PATCH v6 22/22] iotests: Test file format nesting Max Reitz

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=20140102040121.GA17904@stefanha-thinkpad.redhat.com \
    --to=stefanha@redhat.com \
    --cc=famz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@gmail.com \
    /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).