From: Paolo Bonzini <pbonzini@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 02/11] chardev: fix QemuOpts lifecycle
Date: Thu, 10 Jan 2013 11:26:31 +0100 [thread overview]
Message-ID: <50EE9757.4080705@redhat.com> (raw)
In-Reply-To: <1357566928-25361-3-git-send-email-kraxel@redhat.com>
Il 07/01/2013 14:55, Gerd Hoffmann ha scritto:
> 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 <kraxel@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Paolo
> ---
> include/char/char.h | 1 +
> qemu-char.c | 20 ++++++++++++++------
> 2 files changed, 15 insertions(+), 6 deletions(-)
>
> diff --git a/include/char/char.h b/include/char/char.h
> index 1952a10..c91ce3c 100644
> --- a/include/char/char.h
> +++ b/include/char/char.h
> @@ -75,6 +75,7 @@ struct CharDriverState {
> char *filename;
> int opened;
> int avail_connections;
> + QemuOpts *opts;
> QTAILQ_ENTRY(CharDriverState) next;
> };
>
> diff --git a/qemu-char.c b/qemu-char.c
> index 91f64e9..a29c2bb 100644
> --- a/qemu-char.c
> +++ b/qemu-char.c
> @@ -2787,13 +2787,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)
> @@ -2802,14 +2802,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)
> @@ -2830,7 +2830,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))
> @@ -2856,7 +2861,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;
> }
>
> @@ -2884,10 +2888,14 @@ void qemu_chr_fe_close(struct CharDriverState *chr)
> void qemu_chr_delete(CharDriverState *chr)
> {
> QTAILQ_REMOVE(&chardevs, chr, next);
> - if (chr->chr_close)
> + if (chr->chr_close) {
> chr->chr_close(chr);
> + }
> g_free(chr->filename);
> g_free(chr->label);
> + if (chr->opts) {
> + qemu_opts_del(chr->opts);
> + }
> g_free(chr);
> }
>
>
next prev parent reply other threads:[~2013-01-10 10:26 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-07 13:55 [Qemu-devel] [PATCH 00/11] chardev hotplug patch series Gerd Hoffmann
2013-01-07 13:55 ` [Qemu-devel] [PATCH 01/11] chardev: add error reporting for qemu_chr_new_from_opts Gerd Hoffmann
2013-01-10 10:26 ` Paolo Bonzini
2013-01-07 13:55 ` [Qemu-devel] [PATCH 02/11] chardev: fix QemuOpts lifecycle Gerd Hoffmann
2013-01-10 10:26 ` Paolo Bonzini [this message]
2013-01-07 13:55 ` [Qemu-devel] [PATCH 03/11] chardev: reduce chardev ifdef mess a bit Gerd Hoffmann
2013-01-10 10:27 ` Paolo Bonzini
2013-01-07 13:55 ` [Qemu-devel] [PATCH 04/11] chardev: add qmp hotplug commands, with null chardev support Gerd Hoffmann
2013-01-09 17:14 ` Eric Blake
2013-01-10 8:45 ` Gerd Hoffmann
2013-01-07 13:55 ` [Qemu-devel] [PATCH 05/11] chardev: add hmp hotplug commands Gerd Hoffmann
2013-01-10 10:33 ` Paolo Bonzini
2013-01-10 10:53 ` Gerd Hoffmann
2013-01-10 10:57 ` Paolo Bonzini
2013-01-10 12:35 ` Luiz Capitulino
2013-01-07 13:55 ` [Qemu-devel] [PATCH 06/11] chardev: add file chardev support to chardev-add (qmp) Gerd Hoffmann
2013-01-09 18:12 ` Eric Blake
2013-01-10 9:10 ` Gerd Hoffmann
2013-01-10 10:35 ` Paolo Bonzini
2013-01-07 13:55 ` [Qemu-devel] [PATCH 07/11] chardev: add tty " Gerd Hoffmann
2013-01-10 10:39 ` Paolo Bonzini
2013-01-07 13:55 ` [Qemu-devel] [PATCH 08/11] chardev: add serial " Gerd Hoffmann
2013-01-10 10:38 ` Paolo Bonzini
2013-01-10 11:05 ` Gerd Hoffmann
2013-01-10 12:37 ` Gerd Hoffmann
2013-01-10 12:46 ` Paolo Bonzini
2013-01-07 13:55 ` [Qemu-devel] [PATCH 09/11] chardev: add parport " Gerd Hoffmann
2013-01-10 10:40 ` Paolo Bonzini
2013-01-07 13:55 ` [Qemu-devel] [PATCH 10/11] chardev: add socket " Gerd Hoffmann
2013-01-09 20:03 ` Eric Blake
2013-01-10 9:12 ` Gerd Hoffmann
2013-01-07 13:55 ` [Qemu-devel] [PATCH 11/11] chardev: add pty " Gerd Hoffmann
2013-01-09 17:37 ` Eric Blake
2013-01-10 9:14 ` Gerd Hoffmann
2013-01-10 10:42 ` Paolo Bonzini
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=50EE9757.4080705@redhat.com \
--to=pbonzini@redhat.com \
--cc=kraxel@redhat.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.