[lxc-devel] [lxc/master] tree-wide: s/sigprocmask/pthread_sigmask()/g

brauner on Github lxc-bot at linuxcontainers.org
Thu May 24 18:31:40 UTC 2018


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 478 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20180524/82dcde7c/attachment.bin>
-------------- next part --------------
From 7db90a570e336b030919ca82fdab0384382778cf Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Thu, 24 May 2018 20:29:48 +0200
Subject: [PATCH] tree-wide: s/sigprocmask/pthread_sigmask()/g

The behavior of sigprocmask() is unspecified in multi-threaded programs. Let's
use pthread_sigmask() instead.

Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
---
 src/lxc/cmd/lxc_init.c     | 6 +++---
 src/lxc/cmd/lxc_monitord.c | 2 +-
 src/lxc/start.c            | 8 ++++----
 src/lxc/terminal.c         | 7 ++++---
 src/lxc/utils.c            | 2 +-
 5 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/src/lxc/cmd/lxc_init.c b/src/lxc/cmd/lxc_init.c
index c673bc60a..6a44fca5e 100644
--- a/src/lxc/cmd/lxc_init.c
+++ b/src/lxc/cmd/lxc_init.c
@@ -266,7 +266,7 @@ int main(int argc, char *argv[])
 	if (ret < 0)
 		exit(EXIT_FAILURE);
 
-	ret = sigprocmask(SIG_SETMASK, &mask, &omask);
+	ret = pthread_sigmask(SIG_SETMASK, &mask, &omask);
 	if (ret < 0)
 		exit(EXIT_FAILURE);
 
@@ -340,7 +340,7 @@ int main(int argc, char *argv[])
 			}
 		}
 
-		ret = sigprocmask(SIG_SETMASK, &omask, NULL);
+		ret = pthread_sigmask(SIG_SETMASK, &omask, NULL);
 		if (ret < 0) {
 			SYSERROR("Failed to set signal mask");
 			exit(EXIT_FAILURE);
@@ -368,7 +368,7 @@ int main(int argc, char *argv[])
 	if (ret < 0)
 		exit(EXIT_FAILURE);
 
-	ret = sigprocmask(SIG_SETMASK, &omask, NULL);
+	ret = pthread_sigmask(SIG_SETMASK, &omask, NULL);
 	if (ret < 0) {
 		SYSERROR("Failed to set signal mask");
 		exit(EXIT_FAILURE);
diff --git a/src/lxc/cmd/lxc_monitord.c b/src/lxc/cmd/lxc_monitord.c
index 99f2bdb8b..7a759d84c 100644
--- a/src/lxc/cmd/lxc_monitord.c
+++ b/src/lxc/cmd/lxc_monitord.c
@@ -386,7 +386,7 @@ int main(int argc, char *argv[])
 	    sigdelset(&mask, SIGSEGV) ||
 	    sigdelset(&mask, SIGBUS)  ||
 	    sigdelset(&mask, SIGTERM) ||
-	    sigprocmask(SIG_BLOCK, &mask, NULL)) {
+	    pthread_sigmask(SIG_BLOCK, &mask, NULL)) {
 		SYSERROR("Failed to set signal mask.");
 		exit(EXIT_FAILURE);
 	}
diff --git a/src/lxc/start.c b/src/lxc/start.c
index f4f8e520c..109c4b2c2 100644
--- a/src/lxc/start.c
+++ b/src/lxc/start.c
@@ -314,7 +314,7 @@ static int setup_signal_fd(sigset_t *oldmask)
 			return -EBADF;
 	}
 
-	ret = sigprocmask(SIG_BLOCK, &mask, oldmask);
+	ret = pthread_sigmask(SIG_BLOCK, &mask, oldmask);
 	if (ret < 0) {
 		SYSERROR("Failed to set signal mask");
 		return -EBADF;
@@ -860,7 +860,7 @@ int lxc_init(const char *name, struct lxc_handler *handler)
 	return 0;
 
 out_restore_sigmask:
-	sigprocmask(SIG_SETMASK, &handler->oldmask, NULL);
+	pthread_sigmask(SIG_SETMASK, &handler->oldmask, NULL);
 out_delete_tty:
 	lxc_delete_tty(&conf->ttys);
 out_aborting:
@@ -986,7 +986,7 @@ void lxc_fini(const char *name, struct lxc_handler *handler)
 	}
 
 	/* Reset mask set by setup_signal_fd. */
-	ret = sigprocmask(SIG_SETMASK, &handler->oldmask, NULL);
+	ret = pthread_sigmask(SIG_SETMASK, &handler->oldmask, NULL);
 	if (ret < 0)
 		WARN("%s - Failed to restore signal mask", strerror(errno));
 
@@ -1064,7 +1064,7 @@ static int do_start(void *data)
 		goto out_warn_father;
 	}
 
-	ret = sigprocmask(SIG_SETMASK, &handler->oldmask, NULL);
+	ret = pthread_sigmask(SIG_SETMASK, &handler->oldmask, NULL);
 	if (ret < 0) {
 		SYSERROR("Failed to set signal mask");
 		goto out_warn_father;
diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index 7d69a67e2..234ad672e 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -24,6 +24,7 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <lxc/lxccontainer.h>
+#include <pthread.h>
 #include <signal.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -172,7 +173,7 @@ struct lxc_terminal_state *lxc_terminal_signal_init(int srcfd, int dstfd)
 		goto on_error;
 	}
 
-	ret = sigprocmask(SIG_BLOCK, &mask, &ts->oldmask);
+	ret = pthread_sigmask(SIG_BLOCK, &mask, &ts->oldmask);
 	if (ret < 0) {
 		WARN("Failed to block signals");
 		goto on_error;
@@ -181,7 +182,7 @@ struct lxc_terminal_state *lxc_terminal_signal_init(int srcfd, int dstfd)
 	ts->sigfd = signalfd(-1, &mask, SFD_CLOEXEC);
 	if (ts->sigfd < 0) {
 		WARN("Failed to create signal fd");
-		sigprocmask(SIG_SETMASK, &ts->oldmask, NULL);
+		(void)pthread_sigmask(SIG_SETMASK, &ts->oldmask, NULL);
 		goto on_error;
 	}
 
@@ -206,7 +207,7 @@ void lxc_terminal_signal_fini(struct lxc_terminal_state *ts)
 	if (ts->sigfd >= 0) {
 		close(ts->sigfd);
 
-		if (sigprocmask(SIG_SETMASK, &ts->oldmask, NULL) < 0)
+		if (pthread_sigmask(SIG_SETMASK, &ts->oldmask, NULL) < 0)
 			WARN("%s - Failed to restore signal mask", strerror(errno));
 	}
 
diff --git a/src/lxc/utils.c b/src/lxc/utils.c
index 2669a4d4b..284307f0c 100644
--- a/src/lxc/utils.c
+++ b/src/lxc/utils.c
@@ -495,7 +495,7 @@ struct lxc_popen_FILE *lxc_popen(const char *command)
 		if (ret < 0)
 			_exit(EXIT_FAILURE);
 
-		ret = sigprocmask(SIG_UNBLOCK, &mask, NULL);
+		ret = pthread_sigmask(SIG_UNBLOCK, &mask, NULL);
 		if (ret < 0)
 			_exit(EXIT_FAILURE);
 


More information about the lxc-devel mailing list