Blame SOURCES/0001-libgdm-fix-pointer-boolean-task-confusion.patch

2300da
From 18770aa5b3644abac1879d4eb754351e24072bc2 Mon Sep 17 00:00:00 2001
2300da
From: Ray Strode <rstrode@redhat.com>
2300da
Date: Mon, 14 May 2018 15:49:50 -0400
2300da
Subject: [PATCH] libgdm: fix pointer/boolean task confusion
2300da
2300da
The manager fetching code in GdmClient treats its task
2300da
return value as boolean, but it's actually a pointer (the manager)
2300da
2300da
This commit corrects the confusion.
2300da
2300da
https://bugzilla.gnome.org/show_bug.cgi?id=795940
2300da
---
2300da
 libgdm/gdm-client.c | 8 ++++++--
2300da
 1 file changed, 6 insertions(+), 2 deletions(-)
2300da
2300da
diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c
2300da
index 294f4f4d0..58ede0aab 100644
2300da
--- a/libgdm/gdm-client.c
2300da
+++ b/libgdm/gdm-client.c
2300da
@@ -364,65 +364,67 @@ on_reauthentication_channel_opened (GdmManager         *manager,
2300da
         GCancellable *cancellable;
2300da
         char         *address;
2300da
         GError       *error;
2300da
 
2300da
         error = NULL;
2300da
         if (!gdm_manager_call_open_reauthentication_channel_finish (manager,
2300da
                                                                     &address,
2300da
                                                                     result,
2300da
                                                                     &error)) {
2300da
                 g_task_return_error (task, error);
2300da
                 g_object_unref (task);
2300da
                 return;
2300da
         }
2300da
 
2300da
         cancellable = g_task_get_cancellable (task);
2300da
         g_dbus_connection_new_for_address (address,
2300da
                                            G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT,
2300da
                                            NULL,
2300da
                                            cancellable,
2300da
                                            (GAsyncReadyCallback)
2300da
                                            on_reauthentication_channel_connected,
2300da
                                            task);
2300da
 }
2300da
 
2300da
 static void
2300da
 on_got_manager_for_reauthentication (GdmClient           *client,
2300da
                                      GAsyncResult        *result,
2300da
                                      GTask               *task)
2300da
 {
2300da
         GCancellable *cancellable;
2300da
+        GdmManager   *manager;
2300da
         char         *username;
2300da
         GError       *error;
2300da
 
2300da
         error = NULL;
2300da
-        if (!g_task_propagate_boolean (G_TASK (result), &error)) {
2300da
+        manager = g_task_propagate_pointer (G_TASK (result), &error);
2300da
+        if (manager == NULL) {
2300da
                 g_task_return_error (task, error);
2300da
                 g_object_unref (task);
2300da
                 return;
2300da
         }
2300da
 
2300da
         cancellable = g_task_get_cancellable (task);
2300da
         username = g_object_get_data (G_OBJECT (task), "username");
2300da
         gdm_manager_call_open_reauthentication_channel (client->priv->manager,
2300da
                                                         username,
2300da
                                                         cancellable,
2300da
                                                         (GAsyncReadyCallback)
2300da
                                                         on_reauthentication_channel_opened,
2300da
                                                         task);
2300da
 
2300da
 }
2300da
 
2300da
 static gboolean
2300da
 gdm_client_open_connection_sync (GdmClient      *client,
2300da
                                  GCancellable   *cancellable,
2300da
                                  GError        **error)
2300da
 {
2300da
         gboolean ret;
2300da
 
2300da
         g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE);
2300da
 
2300da
         if (client->priv->manager == NULL) {
2300da
                 client->priv->manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
2300da
                                                                             G_DBUS_PROXY_FLAGS_NONE,
2300da
                                                                             "org.gnome.DisplayManager",
2300da
                                                                             "/org/gnome/DisplayManager/Manager",
2300da
@@ -507,64 +509,66 @@ on_session_opened (GdmManager         *manager,
2300da
         client = GDM_CLIENT (g_async_result_get_source_object (G_ASYNC_RESULT (task)));
2300da
 
2300da
         error = NULL;
2300da
         if (!gdm_manager_call_open_session_finish (manager,
2300da
                                                    &client->priv->address,
2300da
                                                    result,
2300da
                                                    &error)) {
2300da
                 g_task_return_error (task, error);
2300da
                 g_object_unref (task);
2300da
                 g_object_unref (client);
2300da
                 return;
2300da
         }
2300da
 
2300da
         cancellable = g_task_get_cancellable (task);
2300da
         g_dbus_connection_new_for_address (client->priv->address,
2300da
                                            G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT,
2300da
                                            NULL,
2300da
                                            cancellable,
2300da
                                            (GAsyncReadyCallback)
2300da
                                            on_connected,
2300da
                                            task);
2300da
         g_object_unref (client);
2300da
 }
2300da
 
2300da
 static void
2300da
 on_got_manager_for_opening_connection (GdmClient           *client,
2300da
                                        GAsyncResult        *result,
2300da
                                        GTask               *task)
2300da
 {
2300da
         GCancellable *cancellable;
2300da
+        GdmManager   *manager;
2300da
         GError       *error;
2300da
 
2300da
         error = NULL;
2300da
-        if (!g_task_propagate_boolean (G_TASK (result), &error)) {
2300da
+        manager = g_task_propagate_pointer (G_TASK (result), &error);
2300da
+        if (manager == NULL) {
2300da
                 g_task_return_error (task, error);
2300da
                 g_object_unref (task);
2300da
                 return;
2300da
         }
2300da
 
2300da
         cancellable = g_task_get_cancellable (task);
2300da
         gdm_manager_call_open_session (client->priv->manager,
2300da
                                        cancellable,
2300da
                                        (GAsyncReadyCallback)
2300da
                                        on_session_opened,
2300da
                                        task);
2300da
 }
2300da
 
2300da
 static void
2300da
 finish_pending_opens (GdmClient *client,
2300da
                       GError    *error)
2300da
 {
2300da
     GList *node;
2300da
 
2300da
     for (node = client->priv->pending_opens;
2300da
          node != NULL;
2300da
          node = node->next) {
2300da
 
2300da
         GTask *task = node->data;
2300da
 
2300da
         g_task_return_error (task, error);
2300da
         g_object_unref (task);
2300da
     }
2300da
     g_clear_pointer (&client->priv->pending_opens,
2300da
                      (GDestroyNotify) g_list_free);
2300da
-- 
2300da
2.20.1
2300da