[CRIU] [PATCH 5/5] parasite: restore signal blocking mask on error paths

Andrey Vagin avagin at openvz.org
Mon May 27 08:38:53 EDT 2013


Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
 pie/parasite.c | 43 +++++++++++++++++++------------------------
 1 file changed, 19 insertions(+), 24 deletions(-)

diff --git a/pie/parasite.c b/pie/parasite.c
index e6ee8a2..513a851 100644
--- a/pie/parasite.c
+++ b/pie/parasite.c
@@ -177,23 +177,6 @@ static int dump_thread(struct parasite_dump_thread *args)
 	return 0;
 }
 
-static int init_daemon_thread(struct parasite_init_args *args)
-{
-	k_rtsigset_t to_block;
-	int ret;
-
-	ksigfillset(&to_block);
-	ret = sys_sigprocmask(SIG_SETMASK, &to_block,
-			      &args->sig_blocked,
-			      sizeof(k_rtsigset_t));
-	if (ret)
-		return -1;
-
-	sigframe = args->sigframe;
-
-	return ret;
-}
-
 static int init_thread(struct parasite_dump_thread *args)
 {
 	k_rtsigset_t to_block;
@@ -230,25 +213,37 @@ static int fini_thread(struct parasite_dump_thread *args)
 
 static int init(struct parasite_init_args *args)
 {
+	k_rtsigset_t to_block;
 	int ret;
 
-	ret = init_daemon_thread(args);
-	if (ret < 0)
-		return ret;
+	sigframe = args->sigframe;
+
+	ksigfillset(&to_block);
+	ret = sys_sigprocmask(SIG_SETMASK, &to_block,
+			      &args->sig_blocked,
+			      sizeof(k_rtsigset_t));
+	if (ret)
+		return -1;
 
 	tsock = sys_socket(PF_UNIX, SOCK_DGRAM, 0);
-	if (tsock < 0)
-		return tsock;
+	if (tsock < 0) {
+		ret = tsock;
+		goto err;
+	}
 
 	ret = sys_bind(tsock, (struct sockaddr *) &args->p_addr, args->p_addr_len);
 	if (ret < 0)
-		return ret;
+		goto err;
 
 	ret = sys_connect(tsock, (struct sockaddr *)&args->h_addr, args->h_addr_len);
 	if (ret < 0)
-		return ret;
+		goto err;
 
 	return 0;
+err:
+	sys_sigprocmask(SIG_SETMASK, &args->sig_blocked,
+				NULL, sizeof(k_rtsigset_t));
+	return ret;
 }
 
 static char proc_mountpoint[] = "proc.crtools";
-- 
1.8.2



More information about the CRIU mailing list