From: Lennart Poettering Date: Tue, 13 Apr 2010 00:36:19 +0000 (+0200) Subject: main: when ignoring a signal set SA_RESTART X-Git-Tag: v1~538 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=a337c6fcee2ab43bf791968f265a0a937715a3ff main: when ignoring a signal set SA_RESTART --- 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);