From: "Roger Pau Monné" <roger.pau@citrix.com>
To: Ian Jackson <ian.jackson@eu.citrix.com>, xen-devel@lists.xensource.com
Cc: Ian Campbell <ian.campbell@citrix.com>, coverity@xenproject.org
Subject: Re: [PATCH] libxl: libxl__spawn_qdisk_backend closes fds
Date: Tue, 18 Mar 2014 10:08:05 +0100 [thread overview]
Message-ID: <53280CF5.9040901@citrix.com> (raw)
In-Reply-To: <1395073963-3737-1-git-send-email-ian.jackson@eu.citrix.com>
On 17/03/14 17:32, Ian Jackson wrote:
> This function needs to close both null and logfile_w on both error and
> normal exits. (The child gets its own copy during the fork, and the
> parent doesn't need them any more.)
>
> Use the standard initialise-to-unallocated, always-free style; the
> label "out" only makes the callback if rc is nonzero.
>
> Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
> Coverity-ID: 1130517 and 1130518
There's a similar patch in
<21134.22006.356685.408733@mariner.uk.xensource.com>.
> Cc: Roger Pau Monne <roger.pau@citrix.com>
> Cc: Ian Campbell <ian.campbell@citrix.com>
> Cc: coverity@xenproject.org
> ---
> tools/libxl/libxl_dm.c | 15 ++++++++++++---
> 1 file changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
> index 8abed7b..d28ea4d 100644
> --- a/tools/libxl/libxl_dm.c
> +++ b/tools/libxl/libxl_dm.c
> @@ -1392,7 +1392,7 @@ void libxl__spawn_qdisk_backend(libxl__egc *egc, libxl__dm_spawn_state *dmss)
> flexarray_t *dm_args;
> char **args;
> const char *dm;
> - int logfile_w, null, rc;
> + int logfile_w = -1, null = -1, rc;
> uint32_t domid = dmss->guest_domid;
>
> /* Always use qemu-xen as device model */
> @@ -1448,12 +1448,21 @@ void libxl__spawn_qdisk_backend(libxl__egc *egc, libxl__dm_spawn_state *dmss)
> libxl__exec(gc, null, logfile_w, logfile_w, dm, args, NULL);
> }
>
> + rc = 0;
> +
> + out:
> + if (logfile_w >= 0) close(logfile_w);
> + if (null >= 0) close(null);
> +
> + /* rc is nonzero iff we had an error; if we had no error then
> + * spawn succeeded and we will continue in a further callback */
> + if (rc)
> + dmss->callback(egc, dmss, rc);
Using the device_model_spawn_outcome helper instead of directly calling
the callback will print a nice error message in case spawn has failed.
> return;
>
> error:
> assert(rc);
> - dmss->callback(egc, dmss, rc);
> - return;
> + goto out;
This jump backwards is kind of strange IMHO, why not just rename the
error label to out and use it instead for both the error and non-error
exit paths?
Roger.
next prev parent reply other threads:[~2014-03-18 9:08 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-17 16:32 [PATCH] libxl: libxl__spawn_qdisk_backend closes fds Ian Jackson
2014-03-18 9:08 ` Roger Pau Monné [this message]
2014-03-18 16:23 ` Ian Jackson
2014-04-23 10:38 ` Ian Campbell
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=53280CF5.9040901@citrix.com \
--to=roger.pau@citrix.com \
--cc=coverity@xenproject.org \
--cc=ian.campbell@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=xen-devel@lists.xensource.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.