diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2016-11-27 16:47:21 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2016-11-27 16:47:21 +0100 |
| commit | ce66ec2833143cc14eb6cffc6f16b736df9d1f31 (patch) | |
| tree | f48ef5c733fbe0dfbdc10f41267e22990dce858f /main.c | |
| parent | 81e20069163d7c0780d759d904149e247f97db86 (diff) | |
| download | vis-ce66ec2833143cc14eb6cffc6f16b736df9d1f31.tar.gz vis-ce66ec2833143cc14eb6cffc6f16b736df9d1f31.tar.xz | |
vis: cleanup signal handling code
Move all signal handling code out of "library" code into user application.
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 24 |
1 files changed, 20 insertions, 4 deletions
@@ -2237,16 +2237,32 @@ int main(int argc, char *argv[]) { /* install signal handlers etc. */ struct sigaction sa; memset(&sa, 0, sizeof sa); + sigfillset(&sa.sa_mask); sa.sa_flags = SA_SIGINFO; sa.sa_sigaction = signal_handler; - if (sigaction(SIGBUS, &sa, NULL) || sigaction(SIGINT, &sa, NULL)) - vis_die(vis, "sigaction: %s", strerror(errno)); + if (sigaction(SIGBUS, &sa, NULL) == -1 || + sigaction(SIGINT, &sa, NULL) == -1 || + sigaction(SIGCONT, &sa, NULL) == -1 || + sigaction(SIGWINCH, &sa, NULL) == -1 || + sigaction(SIGTERM, &sa, NULL) == -1 || + sigaction(SIGHUP, &sa, NULL) == -1) { + vis_die(vis, "Failed to set signal handler: %s\n", strerror(errno)); + } + + sa.sa_handler = SIG_IGN; + if (sigaction(SIGPIPE, &sa, NULL) == -1) + vis_die(vis, "Failed to ignore SIGPIPE\n"); sigset_t blockset; sigemptyset(&blockset); + sigaddset(&blockset, SIGBUS); + sigaddset(&blockset, SIGINT); + sigaddset(&blockset, SIGCONT); sigaddset(&blockset, SIGWINCH); - sigprocmask(SIG_BLOCK, &blockset, NULL); - signal(SIGPIPE, SIG_IGN); + sigaddset(&blockset, SIGTERM); + sigaddset(&blockset, SIGHUP); + if (sigprocmask(SIG_BLOCK, &blockset, NULL) == -1) + vis_die(vis, "Failed to block signals\n"); for (int i = 1; i < argc; i++) { if (argv[i][0] != '-') { |
