From a337c6fcee2ab43bf791968f265a0a937715a3ff Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 13 Apr 2010 02:36:19 +0200 Subject: [PATCH 1/1] main: when ignoring a signal set SA_RESTART --- main.c | 4 ++-- util.c | 11 ++++++++++- util.h | 2 ++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/main.c b/main.c index 0eb64d265..3e2bfe10c 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 e32e2f256..a1b9f1e0f 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 6d1af6eef..6728eb143 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); -- 2.30.2