summaryrefslogtreecommitdiff
path: root/src/dropnroll.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/dropnroll.c')
-rw-r--r--src/dropnroll.c16
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;