[CRIU] [PATCH 2/3] restore: Don't close LAST_PID_PATH descriptor if it was not opened

Cyrill Gorcunov gorcunov at openvz.org
Sat Mar 3 16:39:23 EST 2012


And clean it up a bit as well.

Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
 cr-restore.c |   15 ++++++++-------
 1 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/cr-restore.c b/cr-restore.c
index 720f23f..46295c3 100644
--- a/cr-restore.c
+++ b/cr-restore.c
@@ -1232,9 +1232,9 @@ struct cr_clone_arg {
 
 static inline int fork_with_pid(int pid, unsigned long ns_clone_flags)
 {
+	struct cr_clone_arg ca = { };
 	int ret = -1;
 	char buf[32];
-	struct cr_clone_arg ca;
 	void *stack;
 
 	pr_info("Forking task with %d pid (flags %lx)\n", pid, ns_clone_flags);
@@ -1246,10 +1246,9 @@ static inline int fork_with_pid(int pid, unsigned long ns_clone_flags)
 		goto err;
 	}
 
-	snprintf(buf, sizeof(buf), "%d", pid - 1);
-	ca.pid = pid;
-	ca.clone_flags = ns_clone_flags;
-	ca.fd = open(LAST_PID_PATH, O_RDWR);
+	ca.pid		= pid;
+	ca.clone_flags	= ns_clone_flags;
+	ca.fd		= open(LAST_PID_PATH, O_RDWR);
 	if (ca.fd < 0) {
 		pr_perror("%d: Can't open %s", pid, LAST_PID_PATH);
 		goto err;
@@ -1257,9 +1256,10 @@ static inline int fork_with_pid(int pid, unsigned long ns_clone_flags)
 
 	if (flock(ca.fd, LOCK_EX)) {
 		pr_perror("%d: Can't lock %s", pid, LAST_PID_PATH);
-		goto err;
+		goto err_close;
 	}
 
+	snprintf(buf, sizeof(buf), "%d", pid - 1);
 	if (write_img_buf(ca.fd, buf, strlen(buf)))
 		goto err_unlock;
 
@@ -1273,11 +1273,12 @@ err_unlock:
 	if (flock(ca.fd, LOCK_UN))
 		pr_perror("%d: Can't unlock %s", pid, LAST_PID_PATH);
 
+err_close:
+	close_safe(&ca.fd);
 err:
 	if (stack != MAP_FAILED)
 		munmap(stack, STACK_SIZE);
 
-	close_safe(&ca.fd);
 	return ret;
 }
 
-- 
1.7.7.6



More information about the CRIU mailing list