From: Laszlo Ersek <lersek@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: qemu-devel@nongnu.org, stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH v2] blkdebug: Don't leak bs->file on failure
Date: Sat, 08 Feb 2014 11:52:13 +0100 [thread overview]
Message-ID: <52F60C5D.5040006@redhat.com> (raw)
In-Reply-To: <1391853624-14369-1-git-send-email-kwolf@redhat.com>
On 02/08/14 11:00, Kevin Wolf wrote:
> Reported-by: Laszlo Ersek <lersek@redhat.com>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
> block/blkdebug.c | 14 +++++++++-----
> 1 file changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/block/blkdebug.c b/block/blkdebug.c
> index 56c4cd0..8eb0db0 100644
> --- a/block/blkdebug.c
> +++ b/block/blkdebug.c
> @@ -396,14 +396,14 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags,
> if (error_is_set(&local_err)) {
> error_propagate(errp, local_err);
> ret = -EINVAL;
> - goto fail;
> + goto out;
> }
>
> /* Read rules from config file or command line options */
> config = qemu_opt_get(opts, "config");
> ret = read_config(s, config, options, errp);
> if (ret) {
> - goto fail;
> + goto out;
> }
>
> /* Set initial state */
> @@ -414,7 +414,7 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags,
> flags, true, false, &local_err);
> if (ret < 0) {
> error_propagate(errp, local_err);
> - goto fail;
> + goto out;
> }
>
> /* Set request alignment */
> @@ -424,11 +424,15 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags,
> } else {
> error_setg(errp, "Invalid alignment");
> ret = -EINVAL;
> - goto fail;
> + goto fail_unref;
> }
>
> ret = 0;
> -fail:
> + goto out;
> +
> +fail_unref:
> + bdrv_unref(bs->file);
> +out:
> qemu_opts_del(opts);
> return ret;
> }
>
I think this is correct, but the standalone "goto out" looks awful :)
In such cases, when I have to combine unconditional teardown with
release-on-error-only, I apply a "nested ifs" pattern, where the
release-on-error-only bits (on the way out) depend on the function exit
status. But "nested ifs" is foreign for qemu, so I think these goto's
actually match the qemu style.
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Thanks!
Laszlo
prev parent reply other threads:[~2014-02-08 10:52 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-08 10:00 [Qemu-devel] [PATCH v2] blkdebug: Don't leak bs->file on failure Kevin Wolf
2014-02-08 10:52 ` Laszlo Ersek [this message]
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=52F60C5D.5040006@redhat.com \
--to=lersek@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.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 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.