60 lines
1.6 KiB
Diff
60 lines
1.6 KiB
Diff
diff --git a/daemon/gkr-daemon.c b/daemon/gkr-daemon.c
|
|
index c63081e..ea85edf 100644
|
|
--- a/daemon/gkr-daemon.c
|
|
+++ b/daemon/gkr-daemon.c
|
|
@@ -43,6 +43,7 @@
|
|
#include <unistd.h>
|
|
#include <fcntl.h>
|
|
#include <errno.h>
|
|
+#include <pthread.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
@@ -90,6 +91,8 @@ static gboolean run_for_start = FALSE;
|
|
static gchar* run_components = NULL;
|
|
static gchar* login_password = NULL;
|
|
static gboolean initialization_completed = FALSE;
|
|
+static gboolean s_thread_valid = FALSE;
|
|
+static pthread_t s_thread;
|
|
|
|
static GOptionEntry option_entries[] = {
|
|
{ "foreground", 'f', 0, G_OPTION_ARG_NONE, &run_foreground,
|
|
@@ -370,7 +373,7 @@ signal_thread (gpointer user_data)
|
|
static void
|
|
setup_signal_handling (GMainLoop *loop)
|
|
{
|
|
- GError *error = NULL;
|
|
+ int res;
|
|
|
|
/*
|
|
* Block these signals for this thread, and any threads
|
|
@@ -387,11 +390,12 @@ setup_signal_handling (GMainLoop *loop)
|
|
sigaddset (&signal_set, SIGTERM);
|
|
pthread_sigmask (SIG_BLOCK, &signal_set, NULL);
|
|
|
|
- g_thread_create (signal_thread, loop, FALSE, &error);
|
|
- if (error != NULL) {
|
|
+ res = pthread_create (&s_thread, NULL, signal_thread, loop);
|
|
+ if (res == 0) {
|
|
+ s_thread_valid = TRUE;
|
|
+ } else {
|
|
g_warning ("couldn't startup thread for signal handling: %s",
|
|
- error && error->message ? error->message : "");
|
|
- g_clear_error (&error);
|
|
+ strerror (res));
|
|
}
|
|
}
|
|
|
|
@@ -404,7 +408,10 @@ gkr_daemon_quit (void)
|
|
* starts the shutdown process.
|
|
*/
|
|
|
|
- raise (SIGTERM);
|
|
+ if (s_thread_valid)
|
|
+ pthread_kill (s_thread, SIGTERM);
|
|
+ else
|
|
+ raise (SIGTERM);
|
|
}
|
|
|
|
static void
|