main: when ignoring a signal set SA_RESTART

This commit is contained in:
Lennart Poettering 2010-04-13 02:36:19 +02:00
parent 0d87eb4279
commit a337c6fcee
3 changed files with 14 additions and 3 deletions

4
main.c
View File

@ -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);

11
util.c
View File

@ -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",

2
util.h
View File

@ -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);