diff options
Diffstat (limited to 'src/dropnroll.c')
-rw-r--r-- | src/dropnroll.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/dropnroll.c b/src/dropnroll.c index 24b22af..a3bd97f 100644 --- a/src/dropnroll.c +++ b/src/dropnroll.c @@ -42,6 +42,7 @@ #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> +#include <signal.h> enum cmd_id_enum { ADD, REMOVE, STATUS, LOG, LISTEN }; typedef enum cmd_id_enum cmd_id_t; @@ -414,10 +415,9 @@ int main_loop(int cmd_listen_fd, int inotify_fd, options_t* opt) } if(FD_ISSET(sig_fd, &tmpfds)) { - if(signal_handle()) { - return_value = 1; + return_value = signal_handle(); + if(return_value == SIGINT || return_value == SIGQUIT || return_value == SIGTERM); break; - } } if(FD_ISSET(inotify_fd, &tmpfds)) { @@ -584,17 +584,21 @@ int main(int argc, char* argv[]) ret = main_loop(cmd_listen_fd, inotify_fd, &opt); - close(cmd_listen_fd); + if(cmd_listen_fd > 0) + close(cmd_listen_fd); close(inotify_fd); + options_clear(&opt); if(!ret) log_printf(NOTICE, "normal shutdown"); else if(ret < 0) log_printf(NOTICE, "shutdown after error"); - else + else { log_printf(NOTICE, "shutdown after signal"); + log_close(); + kill(getpid(), ret); + } - options_clear(&opt); log_close(); return ret; |