From 7544102f2efe3ecfc5108faf762780e3e8985aeb Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 16 Aug 2010 19:35:57 +0100 Subject: [PATCH] Fix screensaver unlock for some users pam_fprintd is very careful to use its own main loop context (as it should) to prevent getting in the way of the gnome-screensaver. Unfortunately, there's a small bug in its logic where it ends up removing a random file descriptor from the default context. In the bug report that file descriptor is really important. It's what tells gnome-screensaver when to drop the dialog. The patch is as simple as: - g_source_remove (timeout_id); + g_source_destroy (source); (g_source_remove always operates on the default context) https://bugzilla.redhat.com/show_bug.cgi?id=614573 --- pam/pam_fprintd.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/pam/pam_fprintd.c b/pam/pam_fprintd.c index 5e8757c..82ab0fe 100644 --- a/pam/pam_fprintd.c +++ b/pam/pam_fprintd.c @@ -298,11 +298,10 @@ static int do_verify(GMainLoop *loop, pam_handle_t *pamh, DBusGProxy *dev) while (ret == PAM_AUTH_ERR && data->max_tries > 0) { GSource *source; - guint timeout_id; /* Set up the timeout on our non-default context */ source = g_timeout_source_new_seconds (TIMEOUT); - timeout_id = g_source_attach (source, g_main_loop_get_context (loop)); + g_source_attach (source, g_main_loop_get_context (loop)); g_source_set_callback (source, verify_timeout_cb, data, NULL); data->timed_out = FALSE; @@ -311,14 +310,14 @@ static int do_verify(GMainLoop *loop, pam_handle_t *pamh, DBusGProxy *dev) D(pamh, "VerifyStart failed: %s", error->message); g_error_free (error); - g_source_remove (timeout_id); + g_source_destroy (source); g_source_unref (source); break; } g_main_loop_run (loop); - g_source_remove (timeout_id); + g_source_destroy (source); g_source_unref (source); /* Ignore errors from VerifyStop */