summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2018-12-21 09:20:15 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2018-12-21 19:49:28 +0100
commitcd2a429ed77fd5a94bc725ee587e028ee2e045dd (patch)
tree1e19eaa83df8da73d41fe0060f86422ba9b02812
parent9d6e839ed8b2fb5e611864f6ed5d278c5222c270 (diff)
downloadsystemd-cd2a429ed77fd5a94bc725ee587e028ee2e045dd.tar.gz
tree-wide: use assert_se() for signal operations with constants
Continuation of a3ebe5eb620e49f0d24082876cafc7579261e64f: in other places we sometimes use assert_se(), and sometimes normal error handling. sigfillset and sigaddset can only fail if mask is NULL (which cannot happen if we are passing in a reference), or if the signal number is invalid (which really shouldn't happen when we are using a constant like SIGCHLD. If SIGCHLD is invalid, we have a bigger problem). So let's simplify things and always use assert_se() in those cases. In sigset_add_many() we could conceivably pass an invalid signal, so let's keep normal error handling here. The caller can do assert_se() around the sigprocmask_many() call if appropriate. '>= 0' is used for consistency with the rest of the codebase.
-rw-r--r--src/basic/async.c5
-rw-r--r--src/basic/process-util.c14
-rw-r--r--src/journal/journal-file.c3
-rw-r--r--src/libsystemd/sd-resolve/sd-resolve.c3
4 files changed, 6 insertions, 19 deletions
diff --git a/src/basic/async.c b/src/basic/async.c
index 1c4b575b05..c45ca01847 100644
--- a/src/basic/async.c
+++ b/src/basic/async.c
@@ -32,10 +32,7 @@ int asynchronous_job(void* (*func)(void *p), void *arg) {
goto finish;
}
- if (sigfillset(&ss) < 0) {
- r = -errno;
- goto finish;
- }
+ assert_se(sigfillset(&ss) >= 0);
/* Block all signals before forking off the thread, so that the new thread is started with all signals
* blocked. This way the existence of the new thread won't affect signal handling in other threads. */
diff --git a/src/basic/process-util.c b/src/basic/process-util.c
index 3cfaceea85..448503409b 100644
--- a/src/basic/process-util.c
+++ b/src/basic/process-util.c
@@ -1255,25 +1255,17 @@ int safe_fork_full(
original_pid = getpid_cached();
if (flags & (FORK_RESET_SIGNALS|FORK_DEATHSIG)) {
-
/* We temporarily block all signals, so that the new child has them blocked initially. This way, we can
* be sure that SIGTERMs are not lost we might send to the child. */
- if (sigfillset(&ss) < 0)
- return log_full_errno(prio, errno, "Failed to reset signal set: %m");
-
+ assert_se(sigfillset(&ss) >= 0);
block_signals = true;
} else if (flags & FORK_WAIT) {
-
/* Let's block SIGCHLD at least, so that we can safely watch for the child process */
- if (sigemptyset(&ss) < 0)
- return log_full_errno(prio, errno, "Failed to clear signal set: %m");
-
- if (sigaddset(&ss, SIGCHLD) < 0)
- return log_full_errno(prio, errno, "Failed to add SIGCHLD to signal set: %m");
-
+ assert_se(sigemptyset(&ss) >= 0);
+ assert_se(sigaddset(&ss, SIGCHLD) >= 0);
block_signals = true;
}
diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
index 3e5733da6b..56827f9f36 100644
--- a/src/journal/journal-file.c
+++ b/src/journal/journal-file.c
@@ -236,8 +236,7 @@ int journal_file_set_offline(JournalFile *f, bool wait) {
sigset_t ss, saved_ss;
int k;
- if (sigfillset(&ss) < 0)
- return -errno;
+ assert_se(sigfillset(&ss) >= 0);
r = pthread_sigmask(SIG_BLOCK, &ss, &saved_ss);
if (r > 0)
diff --git a/src/libsystemd/sd-resolve/sd-resolve.c b/src/libsystemd/sd-resolve/sd-resolve.c
index 47986a4a63..21d783b8f0 100644
--- a/src/libsystemd/sd-resolve/sd-resolve.c
+++ b/src/libsystemd/sd-resolve/sd-resolve.c
@@ -433,8 +433,7 @@ static int start_threads(sd_resolve *resolve, unsigned extra) {
unsigned n;
int r, k;
- if (sigfillset(&ss) < 0)
- return -errno;
+ assert_se(sigfillset(&ss) >= 0);
/* No signals in forked off threads please. We set the mask before forking, so that the threads never exist
* with a different mask than a fully blocked one */