summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-04-13 02:36:19 +0200
committerLennart Poettering <lennart@poettering.net>2010-04-13 02:36:19 +0200
commita337c6fcee2ab43bf791968f265a0a937715a3ff (patch)
treeae16633e49c9e09e9d25d162240b455ba1c5cbeb
parent0d87eb4279034d7806a08d128972558c8ba573ff (diff)
main: when ignoring a signal set SA_RESTART
-rw-r--r--main.c4
-rw-r--r--util.c11
-rw-r--r--util.h2
3 files changed, 14 insertions, 3 deletions
diff --git a/main.c b/main.c
index 0eb64d2659..3e2bfe10ca 100644
--- a/main.c
+++ b/main.c
@@ -445,8 +445,8 @@ int main(int argc, char *argv[]) {
assert_se(reset_all_signal_handlers() == 0);
/* If we are init, we can block sigkill. Yay. */
- signal(SIGKILL, SIG_IGN);
- signal(SIGPIPE, SIG_IGN);
+ ignore_signal(SIGKILL);
+ ignore_signal(SIGPIPE);
/* Close all open files */
assert_se(close_all_fds(NULL, 0) == 0);
diff --git a/util.c b/util.c
index e32e2f2566..a1b9f1e0f1 100644
--- a/util.c
+++ b/util.c
@@ -658,7 +658,6 @@ char *strstrip(char *s) {
*s = 0;
return s;
-
}
char *delete_chars(char *s, const char *bad) {
@@ -1637,6 +1636,16 @@ int release_terminal(void) {
return r;
}
+int ignore_signal(int sig) {
+ struct sigaction sa;
+
+ zero(sa);
+ sa.sa_handler = SIG_IGN;
+ sa.sa_flags = SA_RESTART;
+
+ return sigaction(sig, &sa, NULL);
+}
+
static const char *const ioprio_class_table[] = {
[IOPRIO_CLASS_NONE] = "none",
[IOPRIO_CLASS_RT] = "realtime",
diff --git a/util.h b/util.h
index 6d1af6eefd..6728eb143a 100644
--- a/util.h
+++ b/util.h
@@ -211,6 +211,8 @@ int release_terminal(void);
int flush_fd(int fd);
+int ignore_signal(int sig);
+
extern char * __progname;
const char *ioprio_class_to_string(int i);