From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:60383) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TOIGD-0004KK-Kd for qemu-devel@nongnu.org; Tue, 16 Oct 2012 21:17:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TOIGB-0007qU-Vf for qemu-devel@nongnu.org; Tue, 16 Oct 2012 21:17:25 -0400 Received: from mx1.redhat.com ([209.132.183.28]:5092) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TOIGB-0007qQ-NS for qemu-devel@nongnu.org; Tue, 16 Oct 2012 21:17:23 -0400 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q9H1HMWB025398 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 16 Oct 2012 21:17:23 -0400 Date: Tue, 16 Oct 2012 22:18:18 -0300 From: Luiz Capitulino Message-ID: <20121016221818.1b78c0e0@doriath.home> In-Reply-To: <1350288417-24350-9-git-send-email-kraxel@redhat.com> References: <1350288417-24350-1-git-send-email-kraxel@redhat.com> <1350288417-24350-9-git-send-email-kraxel@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v3 8/9] chardev: fix QemuOpts lifecycle List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gerd Hoffmann Cc: qemu-devel@nongnu.org On Mon, 15 Oct 2012 10:06:56 +0200 Gerd Hoffmann wrote: > qemu_chr_new_from_opts handles QemuOpts release now, so callers don't > have to worry. It will either be saved in CharDriverState, then > released in qemu_chr_delete, or in the error case released instantly. > > Signed-off-by: Gerd Hoffmann Reviewed-by: Luiz Capitulino A comment in qemu_chr_new_from_opts() saying that it takes ownership of opts would be nice though. > --- > qemu-char.c | 15 ++++++++++----- > qemu-char.h | 1 + > 2 files changed, 11 insertions(+), 5 deletions(-) > > diff --git a/qemu-char.c b/qemu-char.c > index e2e1da8..be4ec61 100644 > --- a/qemu-char.c > +++ b/qemu-char.c > @@ -2763,13 +2763,13 @@ CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts, > > if (qemu_opts_id(opts) == NULL) { > error_setg(errp, "chardev: no id specified\n"); > - return NULL; > + goto err; > } > > if (qemu_opt_get(opts, "backend") == NULL) { > error_setg(errp, "chardev: \"%s\" missing backend\n", > qemu_opts_id(opts)); > - return NULL; > + goto err; > } > for (i = 0; i < ARRAY_SIZE(backend_table); i++) { > if (strcmp(backend_table[i].name, qemu_opt_get(opts, "backend")) == 0) > @@ -2778,14 +2778,14 @@ CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts, > if (i == ARRAY_SIZE(backend_table)) { > error_setg(errp, "chardev: backend \"%s\" not found\n", > qemu_opt_get(opts, "backend")); > - return NULL; > + goto err; > } > > chr = backend_table[i].open(opts); > if (!chr) { > error_setg(errp, "chardev: opening backend \"%s\" failed\n", > qemu_opt_get(opts, "backend")); > - return NULL; > + goto err; > } > > if (!chr->filename) > @@ -2806,7 +2806,12 @@ CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts, > chr->avail_connections = 1; > } > chr->label = g_strdup(qemu_opts_id(opts)); > + chr->opts = opts; > return chr; > + > +err: > + qemu_opts_del(opts); > + return NULL; > } > > CharDriverState *qemu_chr_new(const char *label, const char *filename, void (*init)(struct CharDriverState *s)) > @@ -2832,7 +2837,6 @@ CharDriverState *qemu_chr_new(const char *label, const char *filename, void (*in > if (chr && qemu_opt_get_bool(opts, "mux", 0)) { > monitor_init(chr, MONITOR_USE_READLINE); > } > - qemu_opts_del(opts); > return chr; > } > > @@ -2864,6 +2868,7 @@ void qemu_chr_delete(CharDriverState *chr) > chr->chr_close(chr); > g_free(chr->filename); > g_free(chr->label); > + qemu_opts_del(chr->opts); > g_free(chr); > } > > diff --git a/qemu-char.h b/qemu-char.h > index adae13e..99bc132 100644 > --- a/qemu-char.h > +++ b/qemu-char.h > @@ -74,6 +74,7 @@ struct CharDriverState { > char *filename; > int opened; > int avail_connections; > + QemuOpts *opts; > QTAILQ_ENTRY(CharDriverState) next; > }; >