[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