diff options
Diffstat (limited to 'src/sig_handler.c')
-rw-r--r-- | src/sig_handler.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/sig_handler.c b/src/sig_handler.c index 75ef4f4..aa20a98 100644 --- a/src/sig_handler.c +++ b/src/sig_handler.c @@ -37,6 +37,8 @@ #include <glib.h> #include <errno.h> +#include "rhmain.h" + static GThread *signal_thread; void signal_init() @@ -56,7 +58,7 @@ void signal_init() static gpointer signal_thread_func(gpointer data) { - GMainLoop *loop = (GMainLoop *)data; + RHMainLoop *loop = (RHMainLoop *)data; struct timespec timeout; sigset_t signal_set; @@ -83,7 +85,7 @@ static gpointer signal_thread_func(gpointer data) case SIGINT: case SIGQUIT: { log_printf(NOTICE, "signal %d received, exiting", sig_num); - g_main_loop_quit(loop); + rhmain_loop_quit(loop, sig_num); break; } default: { @@ -97,7 +99,7 @@ static gpointer signal_thread_func(gpointer data) return NULL; } -int signal_start(GMainLoop *loop) +int signal_start(RHMainLoop *loop) { g_assert(!signal_thread); @@ -110,5 +112,15 @@ int signal_start(GMainLoop *loop) void signal_stop() { - // nothing yet.. + sigset_t signal_set; + + sigemptyset(&signal_set); + sigaddset(&signal_set, SIGINT); + sigaddset(&signal_set, SIGQUIT); + sigaddset(&signal_set, SIGHUP); + sigaddset(&signal_set, SIGTERM); + sigaddset(&signal_set, SIGUSR1); + sigaddset(&signal_set, SIGUSR2); + + pthread_sigmask(SIG_UNBLOCK, &signal_set, NULL); } |