[CRIU] [PATCH 1/2] compel: Don't reclose files already closed

Cyrill Gorcunov gorcunov at openvz.org
Tue Apr 19 01:07:08 PDT 2016


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);
+	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