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