gnome-keyring/gnome-keyring-no-logout-del...

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