[CRIU] [PATCH 1/2] compel: Don't reclose files already closed
Andrey Vagin
avagin at virtuozzo.com
Tue Apr 19 08:07:36 PDT 2016
On Tue, Apr 19, 2016 at 11:07:08AM +0300, Cyrill Gorcunov wrote:
> In case of error don't re-close files already closed.
>
> https://github.com/xemul/criu/issues/148
>
> Reported-by: Andrew Vagin <avagin at virtuozzo.com>
> Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
> ---
> compel/src/main.c | 18 ++++++++++++------
> 1 file changed, 12 insertions(+), 6 deletions(-)
>
> diff --git a/compel/src/main.c b/compel/src/main.c
> index ce357aeef9a9..ead50be1facb 100644
> --- a/compel/src/main.c
> +++ b/compel/src/main.c
> @@ -73,12 +73,12 @@ static int piegen(void)
> {
> struct stat st;
> void *mem;
> - int fd;
> + int fd, ret = -1;
>
> fd = open(opts.input_filename, O_RDONLY);
> if (fd < 0) {
> pr_perror("Can't open file %s", opts.input_filename);
> - goto err;
> + return -1;
> }
>
> if (fstat(fd, &st)) {
> @@ -99,15 +99,21 @@ static int piegen(void)
> }
>
> if (handle_elf(mem, st.st_size)) {
> - fclose(fout);
> + close(fd), fd = -1;
> unlink(opts.output_filename);
> goto err;
> }
>
> + ret = 0;
> +
> err:
> - fclose(fout);
> - printf("%s generated successfully.\n", opts.output_filename);
> - return 0;
> + if (fd >= 0)
> + close(fd);
> + if (fout)
> + fclose(fout);
fout is a global variable, so I think we need to set it to NULL here
> + if (!ret)
> + printf("%s generated successfully.\n", opts.output_filename);
> + return ret;
> }
>
> int main(int argc, char *argv[])
> --
> 2.5.5
>
More information about the CRIU
mailing list