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 #include #include +#include #include #include #include @@ -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