diff options
author | Maxime Schmitt <maxime.schmitt91@gmail.com> | 2018-10-18 11:35:34 +0200 |
---|---|---|
committer | Maxime Schmitt <maxime.schmitt91@gmail.com> | 2018-10-18 11:35:34 +0200 |
commit | fb2e112fb35203a00e87078f577dee2655d517b1 (patch) | |
tree | 746c43896c832e1620917084ef55602d8ed73bec /src/nvtop.c | |
parent | f5bdce30a12ac1ed14c60a80e4aff77d357263f3 (diff) |
Signal handlers: fix uninterruptible operations
Diffstat (limited to 'src/nvtop.c')
-rw-r--r-- | src/nvtop.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/src/nvtop.c b/src/nvtop.c index 8ad70a5..5de620e 100644 --- a/src/nvtop.c +++ b/src/nvtop.c @@ -32,19 +32,17 @@ #include "nvtop/interface.h" #include "nvtop/version.h" -#define STOP_SIGNAL 0x1 -#define RESIZE_SIGNAL 0x2 - -static volatile unsigned char signal_bits = 0; +static volatile sig_atomic_t signal_exit = 0; +static volatile sig_atomic_t signal_resize_win = 0; static void exit_handler(int signum) { (void) signum; - signal_bits |= STOP_SIGNAL; + signal_exit = 1; } static void resize_handler(int signum) { (void) signum; - signal_bits |= RESIZE_SIGNAL; + signal_resize_win = 1; } static const char helpstring[] = @@ -221,7 +219,7 @@ int main (int argc, char **argv) { } siga.sa_handler = resize_handler; if (sigaction(SIGWINCH, &siga, NULL) != 0) { - perror("Impossible to set signal handler for SIGQUIT: "); + perror("Impossible to set signal handler for SIGWINCH: "); exit(EXIT_FAILURE); } @@ -257,10 +255,10 @@ int main (int argc, char **argv) { initialize_curses(num_devices, biggest_name, use_color_if_available); timeout(refresh_interval); - while (!(signal_bits & STOP_SIGNAL)) { - if (signal_bits & RESIZE_SIGNAL) { + while (!signal_exit) { + if (signal_resize_win) { update_window_size_to_terminal_size(interface); - signal_bits &= ~RESIZE_SIGNAL; + signal_resize_win = 0; clean_pid_cache(); } if (!cache_pid_infos) @@ -277,7 +275,7 @@ int main (int argc, char **argv) { timeout(refresh_interval); if (in == ERR) { // ESC alone if (is_escape_for_quit(interface)) - signal_bits |= STOP_SIGNAL; + signal_exit = 1; else interface_key(27, interface); } @@ -286,10 +284,10 @@ int main (int argc, char **argv) { break; case KEY_F(3) : if (is_escape_for_quit(interface)) - signal_bits |= STOP_SIGNAL; + signal_exit = 1; break; case 'q': - signal_bits |= STOP_SIGNAL; + signal_exit = 1; break; case KEY_F(1) : case KEY_F(2) : |