Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP3:GA
gdm.17606
gdm-drop-weak-refs-on-the-GDBusConnection.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File gdm-drop-weak-refs-on-the-GDBusConnection.patch of Package gdm.17606
From 043804e1daeea506665073f67a884b1f1ae6f396 Mon Sep 17 00:00:00 2001 From: Robert Ancell <robert.ancell@canonical.com> Date: Tue, 5 Dec 2017 14:20:41 +1300 Subject: [PATCH 01/10] Generate autocleanup definitions in libgdm --- libgdm/Makefile.am | 2 ++ libgdm/gdm-client.h | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/libgdm/Makefile.am b/libgdm/Makefile.am index 99ada9a..2f7d7b6 100644 --- a/libgdm/Makefile.am +++ b/libgdm/Makefile.am @@ -12,6 +12,7 @@ gdm-manager-glue.c gdm-manager-glue.h : $(top_srcdir)/daemon/gdm-manager.xml Mak --c-namespace Gdm \ --interface-prefix=org.gnome.DisplayManager \ --generate-c-code=gdm-manager-glue \ + --c-generate-autocleanup=all \ --annotate "org.gnome.DisplayManager.Manager" \ "org.gtk.GDBus.C.Name" Manager \ $(top_srcdir)/daemon/gdm-manager.xml @@ -21,6 +22,7 @@ gdm-client-glue.c gdm-client-glue.h : $(top_srcdir)/daemon/gdm-session.xml Makef --c-namespace Gdm \ --interface-prefix=org.gnome.DisplayManager \ --generate-c-code=gdm-client-glue \ + --c-generate-autocleanup=all \ --annotate "org.gnome.DisplayManager.UserVerifier" \ "org.gtk.GDBus.C.Name" UserVerifier \ --annotate "org.gnome.DisplayManager.Greeter" \ diff --git a/libgdm/gdm-client.h b/libgdm/gdm-client.h index 1ae3d39..8718a2e 100644 --- a/libgdm/gdm-client.h +++ b/libgdm/gdm-client.h @@ -122,6 +122,10 @@ GdmChooser *gdm_client_get_chooser_sync (GdmClient *client, GCancellable *cancellable, GError **error); +#if GLIB_CHECK_VERSION(2, 44, 0) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (GdmClient, g_object_unref) +#endif + G_END_DECLS #endif /* __GDM_CLIENT_H */ -- 2.24.1 From 4337d1549bed19f356a45b3af0a215a3b878379e Mon Sep 17 00:00:00 2001 From: Robert Ancell <robert.ancell@canonical.com> Date: Mon, 4 Dec 2017 16:15:59 +1300 Subject: [PATCH 02/10] Replace deprecated GSimpleAsyncResult with GTask https://bugzilla.gnome.org/show_bug.cgi?id=783082 --- libgdm/gdm-client.c | 531 ++++++++++++++++++++------------------------ 1 file changed, 235 insertions(+), 296 deletions(-) diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c index 6fd55bd..bcae8ba 100644 --- a/libgdm/gdm-client.c +++ b/libgdm/gdm-client.c @@ -77,13 +77,13 @@ gdm_client_error_quark (void) static void on_got_manager (GdmManager *manager, GAsyncResult *result, - GSimpleAsyncResult *operation_result) + GTask *task) { GdmClient *client; GdmManager *new_manager; GError *error; - client = GDM_CLIENT (g_async_result_get_source_object (G_ASYNC_RESULT (operation_result))); + client = GDM_CLIENT (g_async_result_get_source_object (G_ASYNC_RESULT (task))); error = NULL; new_manager = gdm_manager_proxy_new_finish (result, &error); @@ -99,16 +99,14 @@ on_got_manager (GdmManager *manager, } if (error != NULL) { - g_simple_async_result_take_error (operation_result, error); + g_task_return_error (task, error); } else { - g_simple_async_result_set_op_res_gpointer (operation_result, - g_object_ref (client->priv->manager), - (GDestroyNotify) - g_object_unref); + g_task_return_pointer (task, + g_object_ref (client->priv->manager), + (GDestroyNotify) g_object_unref); } - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_object_unref (task); g_object_unref (client); } @@ -118,21 +116,18 @@ get_manager (GdmClient *client, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *result; + GTask *task; - result = g_simple_async_result_new (G_OBJECT (client), - callback, - user_data, - get_manager); - g_simple_async_result_set_check_cancellable (result, cancellable); + task = g_task_new (G_OBJECT (client), + cancellable, + callback, + user_data); if (client->priv->manager != NULL) { - g_simple_async_result_set_op_res_gpointer (result, - g_object_ref (client->priv->manager), - (GDestroyNotify) - g_object_unref); - g_simple_async_result_complete_in_idle (result); - g_object_unref (result); + g_task_return_pointer (task, + g_object_ref (client->priv->manager), + (GDestroyNotify) g_object_unref); + g_object_unref (task); return; } @@ -143,20 +138,47 @@ get_manager (GdmClient *client, cancellable, (GAsyncReadyCallback) on_got_manager, - result); + task); +} + +typedef struct { + GTask *task; + GdmUserVerifier *user_verifier; +} UserVerifierData; + +static UserVerifierData * +user_verifier_data_new (GTask *task, GdmUserVerifier *user_verifier) +{ + UserVerifierData *data; + + data = g_slice_new (UserVerifierData); + data->task = g_object_ref (task); + data->user_verifier = g_object_ref (user_verifier); + + return data; +} + +static void +user_verifier_data_free (UserVerifierData *data) +{ + g_object_unref (data->task); + g_object_unref (data->user_verifier); + g_slice_free (UserVerifierData, data); } static void complete_user_verifier_proxy_operation (GdmClient *client, - GSimpleAsyncResult *operation_result) + UserVerifierData *data) { - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_pointer (data->task, + g_object_ref (data->user_verifier), + (GDestroyNotify) g_object_unref); + user_verifier_data_free (data); } static void maybe_complete_user_verifier_proxy_operation (GdmClient *client, - GSimpleAsyncResult *operation_result) + UserVerifierData *data) { GHashTableIter iter; gpointer key, value; @@ -169,19 +191,19 @@ maybe_complete_user_verifier_proxy_operation (GdmClient *client, } } - complete_user_verifier_proxy_operation (client, operation_result); + complete_user_verifier_proxy_operation (client, data); } static void on_user_verifier_choice_list_proxy_created (GObject *source, GAsyncResult *result, - GSimpleAsyncResult *operation_result) + UserVerifierData *data) { GdmClient *client; GdmUserVerifierChoiceList *choice_list; GError *error = NULL; - client = GDM_CLIENT (g_async_result_get_source_object (G_ASYNC_RESULT (operation_result))); + client = GDM_CLIENT (g_async_result_get_source_object (G_ASYNC_RESULT (data->task))); choice_list = gdm_user_verifier_choice_list_proxy_new_finish (result, &error); @@ -193,13 +215,13 @@ on_user_verifier_choice_list_proxy_created (GObject *source, g_hash_table_replace (client->priv->user_verifier_extensions, gdm_user_verifier_choice_list_interface_info ()->name, choice_list); } - maybe_complete_user_verifier_proxy_operation (client, operation_result); + maybe_complete_user_verifier_proxy_operation (client, data); } static void on_user_verifier_extensions_enabled (GdmUserVerifier *user_verifier, GAsyncResult *result, - GSimpleAsyncResult *operation_result) + UserVerifierData *data) { GdmClient *client; GCancellable *cancellable; @@ -207,8 +229,8 @@ on_user_verifier_extensions_enabled (GdmUserVerifier *user_verifier, GError *error = NULL; size_t i; - client = GDM_CLIENT (g_async_result_get_source_object (G_ASYNC_RESULT (operation_result))); - cancellable = g_object_get_data (G_OBJECT (operation_result), "cancellable"); + client = GDM_CLIENT (g_async_result_get_source_object (G_ASYNC_RESULT (data->task))); + cancellable = g_task_get_cancellable (data->task); gdm_user_verifier_call_enable_extensions_finish (user_verifier, result, &error); @@ -216,7 +238,7 @@ on_user_verifier_extensions_enabled (GdmUserVerifier *user_verifier, g_debug ("Couldn't enable user verifier extensions: %s", error->message); g_clear_error (&error); - complete_user_verifier_proxy_operation (client, operation_result); + complete_user_verifier_proxy_operation (client, data); return; } @@ -236,7 +258,7 @@ on_user_verifier_extensions_enabled (GdmUserVerifier *user_verifier, cancellable, (GAsyncReadyCallback) on_user_verifier_choice_list_proxy_created, - operation_result); + data); } else { g_debug ("User verifier extension %s is unsupported", client->priv->enabled_extensions[i]); g_hash_table_remove (client->priv->user_verifier_extensions, @@ -246,7 +268,7 @@ on_user_verifier_extensions_enabled (GdmUserVerifier *user_verifier, if (g_hash_table_size (client->priv->user_verifier_extensions) == 0) { g_debug ("No supported user verifier extensions"); - complete_user_verifier_proxy_operation (client, operation_result); + complete_user_verifier_proxy_operation (client, data); } } @@ -263,7 +285,7 @@ free_interface_skeleton (GDBusInterfaceSkeleton *interface) static void on_user_verifier_proxy_created (GObject *source, GAsyncResult *result, - GSimpleAsyncResult *operation_result) + GTask *task) { GdmClient *self; GdmUserVerifier *user_verifier; @@ -272,24 +294,20 @@ on_user_verifier_proxy_created (GObject *source, user_verifier = gdm_user_verifier_proxy_new_finish (result, &error); if (user_verifier == NULL) { - g_simple_async_result_take_error (operation_result, error); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_error (task, error); + g_object_unref (task); return; } g_debug ("UserVerifier %p created", user_verifier); - g_simple_async_result_set_op_res_gpointer (operation_result, - user_verifier, - (GDestroyNotify) - g_object_unref); - - self = GDM_CLIENT (g_async_result_get_source_object (G_ASYNC_RESULT (operation_result))); + self = GDM_CLIENT (g_async_result_get_source_object (G_ASYNC_RESULT (task))); if (self->priv->enabled_extensions == NULL) { g_debug ("no enabled extensions"); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_pointer (task, + user_verifier, + (GDestroyNotify) g_object_unref); + g_object_unref (task); return; } @@ -298,21 +316,21 @@ on_user_verifier_proxy_created (GObject *source, NULL, (GDestroyNotify) free_interface_skeleton); - cancellable = g_object_get_data (G_OBJECT (operation_result), "cancellable"); + cancellable = g_task_get_cancellable (task); gdm_user_verifier_call_enable_extensions (user_verifier, (const char * const *) self->priv->enabled_extensions, cancellable, (GAsyncReadyCallback) on_user_verifier_extensions_enabled, - operation_result); - + user_verifier_data_new (task, user_verifier)); + g_object_unref (user_verifier); } static void on_reauthentication_channel_connected (GObject *source_object, GAsyncResult *result, - GSimpleAsyncResult *operation_result) + GTask *task) { GDBusConnection *connection; GCancellable *cancellable; @@ -321,13 +339,12 @@ on_reauthentication_channel_connected (GObject *source_object, error = NULL; connection = g_dbus_connection_new_for_address_finish (result, &error); if (!connection) { - g_simple_async_result_take_error (operation_result, error); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_error (task, error); + g_object_unref (task); return; } - cancellable = g_object_get_data (G_OBJECT (operation_result), "cancellable"); + cancellable = g_task_get_cancellable (task); gdm_user_verifier_proxy_new (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, @@ -335,14 +352,14 @@ on_reauthentication_channel_connected (GObject *source_object, cancellable, (GAsyncReadyCallback) on_user_verifier_proxy_created, - operation_result); + task); g_object_unref (connection); } static void on_reauthentication_channel_opened (GdmManager *manager, GAsyncResult *result, - GSimpleAsyncResult *operation_result) + GTask *task) { GCancellable *cancellable; char *address; @@ -353,48 +370,45 @@ on_reauthentication_channel_opened (GdmManager *manager, &address, result, &error)) { - g_simple_async_result_take_error (operation_result, error); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_error (task, error); + g_object_unref (task); return; } - cancellable = g_object_get_data (G_OBJECT (operation_result), "cancellable"); + cancellable = g_task_get_cancellable (task); g_dbus_connection_new_for_address (address, G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, NULL, cancellable, (GAsyncReadyCallback) on_reauthentication_channel_connected, - operation_result); + task); } static void on_got_manager_for_reauthentication (GdmClient *client, GAsyncResult *result, - GSimpleAsyncResult *operation_result) + GTask *task) { GCancellable *cancellable; char *username; GError *error; error = NULL; - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), - &error)) { - g_simple_async_result_take_error (operation_result, error); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + if (!g_task_propagate_boolean (G_TASK (result), &error)) { + g_task_return_error (task, error); + g_object_unref (task); return; } - cancellable = g_object_get_data (G_OBJECT (operation_result), "cancellable"); - username = g_object_get_data (G_OBJECT (operation_result), "username"); + cancellable = g_task_get_cancellable (task); + username = g_object_get_data (G_OBJECT (task), "username"); gdm_manager_call_open_reauthentication_channel (client->priv->manager, username, cancellable, (GAsyncReadyCallback) on_reauthentication_channel_opened, - operation_result); + task); } @@ -457,7 +471,7 @@ gdm_client_open_connection_sync (GdmClient *client, static void on_connected (GObject *source_object, GAsyncResult *result, - GSimpleAsyncResult *operation_result) + GTask *task) { GDBusConnection *connection; GError *error; @@ -465,78 +479,72 @@ on_connected (GObject *source_object, error = NULL; connection = g_dbus_connection_new_for_address_finish (result, &error); if (!connection) { - g_simple_async_result_take_error (operation_result, error); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_error (task, error); + g_object_unref (task); return; } - g_simple_async_result_set_op_res_gpointer (operation_result, - g_object_ref (connection), - (GDestroyNotify) - g_object_unref); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_pointer (task, + g_object_ref (connection), + (GDestroyNotify) g_object_unref); + g_object_unref (task); g_object_unref (connection); } static void on_session_opened (GdmManager *manager, GAsyncResult *result, - GSimpleAsyncResult *operation_result) + GTask *task) { GdmClient *client; GCancellable *cancellable; GError *error; - client = GDM_CLIENT (g_async_result_get_source_object (G_ASYNC_RESULT (operation_result))); + client = GDM_CLIENT (g_async_result_get_source_object (G_ASYNC_RESULT (task))); error = NULL; if (!gdm_manager_call_open_session_finish (manager, &client->priv->address, result, &error)) { - g_simple_async_result_take_error (operation_result, error); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_error (task, error); + g_object_unref (task); g_object_unref (client); return; } - cancellable = g_object_get_data (G_OBJECT (operation_result), "cancellable"); + cancellable = g_task_get_cancellable (task); g_dbus_connection_new_for_address (client->priv->address, G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, NULL, cancellable, (GAsyncReadyCallback) on_connected, - operation_result); + task); g_object_unref (client); } static void on_got_manager_for_opening_connection (GdmClient *client, GAsyncResult *result, - GSimpleAsyncResult *operation_result) + GTask *task) { GCancellable *cancellable; GError *error; error = NULL; - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), - &error)) { - g_simple_async_result_take_error (operation_result, error); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + if (!g_task_propagate_boolean (G_TASK (result), &error)) { + g_task_return_error (task, error); + g_object_unref (task); return; } - cancellable = g_object_get_data (G_OBJECT (operation_result), "cancellable"); + cancellable = g_task_get_cancellable (task); gdm_manager_call_open_session (client->priv->manager, cancellable, (GAsyncReadyCallback) on_session_opened, - operation_result); + task); } static void @@ -549,11 +557,10 @@ finish_pending_opens (GdmClient *client, node != NULL; node = node->next) { - GSimpleAsyncResult *pending_result = node->data; + GTask *task = node->data; - g_simple_async_result_set_from_error (pending_result, error); - g_simple_async_result_complete_in_idle (pending_result); - g_object_unref (pending_result); + g_task_return_error (task, error); + g_object_unref (task); } g_clear_pointer (&client->priv->pending_opens, (GDestroyNotify) g_list_free); @@ -564,16 +571,18 @@ gdm_client_open_connection_finish (GdmClient *client, GAsyncResult *result, GError **error) { + g_autoptr(GDBusConnection) connection = NULL; + g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), - error)) { - finish_pending_opens (client, *error); - return FALSE; + connection = g_task_propagate_pointer (G_TASK (result), error); + if (connection == NULL) { + finish_pending_opens (client, *error); + return FALSE; } if (client->priv->connection == NULL) { - client->priv->connection = g_object_ref (g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (result))); + client->priv->connection = g_steal_pointer (&connection); } finish_pending_opens (client, NULL); @@ -586,27 +595,20 @@ gdm_client_open_connection (GdmClient *client, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *operation_result; + GTask *task; g_return_if_fail (GDM_IS_CLIENT (client)); - operation_result = g_simple_async_result_new (G_OBJECT (client), - callback, - user_data, - gdm_client_open_connection); - g_simple_async_result_set_check_cancellable (operation_result, cancellable); - - g_object_set_data (G_OBJECT (operation_result), - "cancellable", - cancellable); + task = g_task_new (G_OBJECT (client), + cancellable, + callback, + user_data); if (client->priv->connection != NULL) { - g_simple_async_result_set_op_res_gpointer (operation_result, - g_object_ref (client->priv->connection), - (GDestroyNotify) - g_object_unref); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_pointer (task, + g_object_ref (client->priv->connection), + (GDestroyNotify) g_object_unref); + g_object_unref (task); return; } @@ -615,10 +617,10 @@ gdm_client_open_connection (GdmClient *client, cancellable, (GAsyncReadyCallback) on_got_manager_for_opening_connection, - operation_result); + task); } else { client->priv->pending_opens = g_list_prepend (client->priv->pending_opens, - operation_result); + task); } } @@ -730,20 +732,16 @@ gdm_client_open_reauthentication_channel (GdmClient *client, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *operation_result; + GTask *task; g_return_if_fail (GDM_IS_CLIENT (client)); - operation_result = g_simple_async_result_new (G_OBJECT (client), - callback, - user_data, - gdm_client_open_reauthentication_channel); - g_simple_async_result_set_check_cancellable (operation_result, cancellable); - g_object_set_data (G_OBJECT (operation_result), - "cancellable", - cancellable); + task = g_task_new (G_OBJECT (client), + cancellable, + callback, + user_data); - g_object_set_data_full (G_OBJECT (operation_result), + g_object_set_data_full (G_OBJECT (task), "username", g_strdup (username), (GDestroyNotify) @@ -753,7 +751,7 @@ gdm_client_open_reauthentication_channel (GdmClient *client, cancellable, (GAsyncReadyCallback) on_got_manager_for_reauthentication, - operation_result); + task); } /** @@ -772,18 +770,9 @@ gdm_client_open_reauthentication_channel_finish (GdmClient *client, GAsyncResult *result, GError **error) { - GdmUserVerifier *user_verifier; - g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), - error)) { - return NULL; - } - - user_verifier = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (result)); - - return g_object_ref (user_verifier); + return g_task_propagate_pointer (G_TASK (result), error); } /** @@ -870,20 +859,19 @@ gdm_client_get_user_verifier_sync (GdmClient *client, static void on_connection_opened_for_user_verifier (GdmClient *client, GAsyncResult *result, - GSimpleAsyncResult *operation_result) + GTask *task) { GCancellable *cancellable; GError *error; error = NULL; if (!gdm_client_open_connection_finish (client, result, &error)) { - g_simple_async_result_take_error (operation_result, error); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_error (task, error); + g_object_unref (task); return; } - cancellable = g_object_get_data (G_OBJECT (operation_result), "cancellable"); + cancellable = g_task_get_cancellable (task); gdm_user_verifier_proxy_new (client->priv->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, @@ -891,7 +879,7 @@ on_connection_opened_for_user_verifier (GdmClient *client, cancellable, (GAsyncReadyCallback) on_user_verifier_proxy_created, - operation_result); + task); } /** @@ -910,27 +898,20 @@ gdm_client_get_user_verifier (GdmClient *client, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *operation_result; + GTask *task; g_return_if_fail (GDM_IS_CLIENT (client)); - operation_result = g_simple_async_result_new (G_OBJECT (client), - callback, - user_data, - gdm_client_get_user_verifier); - g_simple_async_result_set_check_cancellable (operation_result, cancellable); - - g_object_set_data (G_OBJECT (operation_result), - "cancellable", - cancellable); + task = g_task_new (G_OBJECT (client), + cancellable, + callback, + user_data); if (client->priv->user_verifier != NULL) { - g_simple_async_result_set_op_res_gpointer (operation_result, - g_object_ref (client->priv->user_verifier), - (GDestroyNotify) - g_object_unref); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_pointer (task, + g_object_ref (client->priv->user_verifier), + (GDestroyNotify) g_object_unref); + g_object_unref (task); return; } @@ -938,7 +919,7 @@ gdm_client_get_user_verifier (GdmClient *client, cancellable, (GAsyncReadyCallback) on_connection_opened_for_user_verifier, - operation_result); + task); } /** @@ -961,14 +942,12 @@ gdm_client_get_user_verifier_finish (GdmClient *client, g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); - if (client->priv->user_verifier != NULL) { + if (client->priv->user_verifier != NULL) return g_object_ref (client->priv->user_verifier); - } else if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), - error)) { - return NULL; - } - user_verifier = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (result)); + user_verifier = g_task_propagate_pointer (G_TASK (result), error); + if (user_verifier == NULL) + return NULL; client->priv->user_verifier = user_verifier; @@ -986,7 +965,7 @@ gdm_client_get_user_verifier_finish (GdmClient *client, g_clear_object, &client->priv->manager); - return g_object_ref (user_verifier); + return user_verifier; } /** @@ -1032,25 +1011,22 @@ query_for_timed_login_requested_signal (GdmGreeter *greeter) static void on_greeter_proxy_created (GObject *source, GAsyncResult *result, - GSimpleAsyncResult *operation_result) + GTask *task) { GdmGreeter *greeter; GError *error = NULL; greeter = gdm_greeter_proxy_new_finish (result, &error); if (greeter == NULL) { - g_simple_async_result_take_error (operation_result, error); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_error (task, error); + g_object_unref (task); return; } - g_simple_async_result_set_op_res_gpointer (operation_result, - greeter, - (GDestroyNotify) - g_object_unref); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_pointer (task, + greeter, + (GDestroyNotify) g_object_unref); + g_object_unref (task); query_for_timed_login_requested_signal (greeter); } @@ -1058,20 +1034,19 @@ on_greeter_proxy_created (GObject *source, static void on_connection_opened_for_greeter (GdmClient *client, GAsyncResult *result, - GSimpleAsyncResult *operation_result) + GTask *task) { GCancellable *cancellable; GError *error; error = NULL; if (!gdm_client_open_connection_finish (client, result, &error)) { - g_simple_async_result_take_error (operation_result, error); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_error (task, error); + g_object_unref (task); return; } - cancellable = g_object_get_data (G_OBJECT (operation_result), "cancellable"); + cancellable = g_task_get_cancellable (task); gdm_greeter_proxy_new (client->priv->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, @@ -1079,7 +1054,7 @@ on_connection_opened_for_greeter (GdmClient *client, cancellable, (GAsyncReadyCallback) on_greeter_proxy_created, - operation_result); + task); } /** @@ -1098,27 +1073,20 @@ gdm_client_get_greeter (GdmClient *client, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *operation_result; + GTask *task; g_return_if_fail (GDM_IS_CLIENT (client)); - operation_result = g_simple_async_result_new (G_OBJECT (client), - callback, - user_data, - gdm_client_get_greeter); - g_simple_async_result_set_check_cancellable (operation_result, cancellable); - - g_object_set_data (G_OBJECT (operation_result), - "cancellable", - cancellable); + task = g_task_new (G_OBJECT (client), + cancellable, + callback, + user_data); if (client->priv->greeter != NULL) { - g_simple_async_result_set_op_res_gpointer (operation_result, - g_object_ref (client->priv->greeter), - (GDestroyNotify) - g_object_unref); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_pointer (task, + g_object_ref (client->priv->greeter), + (GDestroyNotify) g_object_unref); + g_object_unref (task); return; } @@ -1126,7 +1094,7 @@ gdm_client_get_greeter (GdmClient *client, cancellable, (GAsyncReadyCallback) on_connection_opened_for_greeter, - operation_result); + task); } /** @@ -1149,14 +1117,12 @@ gdm_client_get_greeter_finish (GdmClient *client, g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); - if (client->priv->greeter != NULL) { + if (client->priv->greeter != NULL) return g_object_ref (client->priv->greeter); - } else if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), - error)) { - return NULL; - } - greeter = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (result)); + greeter = g_task_propagate_pointer (G_TASK (result), error); + if (greeter == NULL) + return NULL; client->priv->greeter = greeter; @@ -1174,7 +1140,7 @@ gdm_client_get_greeter_finish (GdmClient *client, g_clear_object, &client->priv->manager); - return g_object_ref (greeter); + return greeter; } /** @@ -1232,44 +1198,40 @@ gdm_client_get_greeter_sync (GdmClient *client, static void on_remote_greeter_proxy_created (GObject *object, GAsyncResult *result, - GSimpleAsyncResult *operation_result) + GTask *task) { GdmRemoteGreeter *remote_greeter; GError *error = NULL; remote_greeter = gdm_remote_greeter_proxy_new_finish (result, &error); if (remote_greeter == NULL) { - g_simple_async_result_take_error (operation_result, error); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_error (task, error); + g_object_unref (task); return; } - g_simple_async_result_set_op_res_gpointer (operation_result, - remote_greeter, - (GDestroyNotify) - g_object_unref); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_pointer (task, + remote_greeter, + (GDestroyNotify) g_object_unref); + g_object_unref (task); } static void on_connection_opened_for_remote_greeter (GdmClient *client, GAsyncResult *result, - GSimpleAsyncResult *operation_result) + GTask *task) { GCancellable *cancellable; GError *error; error = NULL; if (!gdm_client_open_connection_finish (client, result, &error)) { - g_simple_async_result_take_error (operation_result, error); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_error (task, error); + g_object_unref (task); return; } - cancellable = g_object_get_data (G_OBJECT (operation_result), "cancellable"); + cancellable = g_task_get_cancellable (task); gdm_remote_greeter_proxy_new (client->priv->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, @@ -1277,7 +1239,7 @@ on_connection_opened_for_remote_greeter (GdmClient *client, cancellable, (GAsyncReadyCallback) on_remote_greeter_proxy_created, - operation_result); + task); } /** @@ -1296,27 +1258,20 @@ gdm_client_get_remote_greeter (GdmClient *client, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *operation_result; + GTask *task; g_return_if_fail (GDM_IS_CLIENT (client)); - operation_result = g_simple_async_result_new (G_OBJECT (client), - callback, - user_data, - gdm_client_get_remote_greeter); - g_simple_async_result_set_check_cancellable (operation_result, cancellable); - - g_object_set_data (G_OBJECT (operation_result), - "cancellable", - cancellable); + task = g_task_new (G_OBJECT (client), + cancellable, + callback, + user_data); if (client->priv->remote_greeter != NULL) { - g_simple_async_result_set_op_res_gpointer (operation_result, - g_object_ref (client->priv->remote_greeter), - (GDestroyNotify) - g_object_unref); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_pointer (task, + g_object_ref (client->priv->remote_greeter), + (GDestroyNotify) g_object_unref); + g_object_unref (task); return; } @@ -1324,7 +1279,7 @@ gdm_client_get_remote_greeter (GdmClient *client, cancellable, (GAsyncReadyCallback) on_connection_opened_for_remote_greeter, - operation_result); + task); } /** @@ -1347,14 +1302,12 @@ gdm_client_get_remote_greeter_finish (GdmClient *client, g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); - if (client->priv->remote_greeter != NULL) { + if (client->priv->remote_greeter != NULL) return g_object_ref (client->priv->remote_greeter); - } else if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), - error)) { - return NULL; - } - remote_greeter = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (result)); + remote_greeter = g_task_propagate_pointer (G_TASK (result), error); + if (remote_greeter == NULL) + return NULL; client->priv->remote_greeter = remote_greeter; @@ -1372,7 +1325,7 @@ gdm_client_get_remote_greeter_finish (GdmClient *client, g_clear_object, &client->priv->manager); - return g_object_ref (remote_greeter); + return remote_greeter; } /** @@ -1427,44 +1380,40 @@ gdm_client_get_remote_greeter_sync (GdmClient *client, static void on_chooser_proxy_created (GObject *source, GAsyncResult *result, - GSimpleAsyncResult *operation_result) + GTask *task) { GdmChooser *chooser; GError *error = NULL; chooser = gdm_chooser_proxy_new_finish (result, &error); if (chooser == NULL) { - g_simple_async_result_take_error (operation_result, error); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_error (task, error); + g_object_unref (task); return; } - g_simple_async_result_set_op_res_gpointer (operation_result, - chooser, - (GDestroyNotify) - g_object_unref); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_pointer (task, + chooser, + (GDestroyNotify) g_object_unref); + g_object_unref (task); } static void on_connection_opened_for_chooser (GdmClient *client, GAsyncResult *result, - GSimpleAsyncResult *operation_result) + GTask *task) { GCancellable *cancellable; GError *error; error = NULL; if (!gdm_client_open_connection_finish (client, result, &error)) { - g_simple_async_result_take_error (operation_result, error); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_error (task, error); + g_object_unref (task); return; } - cancellable = g_object_get_data (G_OBJECT (operation_result), "cancellable"); + cancellable = g_task_get_cancellable (task); gdm_chooser_proxy_new (client->priv->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, @@ -1472,7 +1421,7 @@ on_connection_opened_for_chooser (GdmClient *client, cancellable, (GAsyncReadyCallback) on_chooser_proxy_created, - operation_result); + task); } /** @@ -1491,27 +1440,20 @@ gdm_client_get_chooser (GdmClient *client, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *operation_result; + GTask *task; g_return_if_fail (GDM_IS_CLIENT (client)); - operation_result = g_simple_async_result_new (G_OBJECT (client), - callback, - user_data, - gdm_client_get_chooser); - g_simple_async_result_set_check_cancellable (operation_result, cancellable); - - g_object_set_data (G_OBJECT (operation_result), - "cancellable", - cancellable); + task = g_task_new (G_OBJECT (client), + cancellable, + callback, + user_data); if (client->priv->chooser != NULL) { - g_simple_async_result_set_op_res_gpointer (operation_result, - g_object_ref (client->priv->chooser), - (GDestroyNotify) - g_object_unref); - g_simple_async_result_complete_in_idle (operation_result); - g_object_unref (operation_result); + g_task_return_pointer (task, + g_object_ref (client->priv->chooser), + (GDestroyNotify) g_object_unref); + g_object_unref (task); return; } @@ -1519,7 +1461,7 @@ gdm_client_get_chooser (GdmClient *client, cancellable, (GAsyncReadyCallback) on_connection_opened_for_chooser, - operation_result); + task); } /** @@ -1542,14 +1484,12 @@ gdm_client_get_chooser_finish (GdmClient *client, g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); - if (client->priv->chooser != NULL) { + if (client->priv->chooser != NULL) return g_object_ref (client->priv->chooser); - } else if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), - error)) { - return NULL; - } - chooser = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (result)); + chooser = g_task_propagate_pointer (G_TASK (result), error); + if (chooser == NULL) + return NULL; client->priv->chooser = chooser; @@ -1567,7 +1507,7 @@ gdm_client_get_chooser_finish (GdmClient *client, g_clear_object, &client->priv->manager); - return g_object_ref (chooser); + return chooser; } /** @@ -1711,5 +1651,4 @@ gdm_client_set_enabled_extensions (GdmClient *client, const char * const *extensions) { client->priv->enabled_extensions = g_strdupv ((char **) extensions); - } -- 2.24.1 From 463aa1c3f35f3d686f1036dabd6f3d963a52fd33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net> Date: Wed, 9 May 2018 15:43:27 +0100 Subject: [PATCH 03/10] libgdm: Don't unref a connection that's in use If an async task tries to reuse an open connection, it erroneously explicitly unrefs it. That is incorrect, because there are weak references in use to handle disposing the connection when its no longer in use. This commit makes sure the local connection object in open_connection is nullified so the connection doesn't get autofree'd. https://bugzilla.gnome.org/show_bug.cgi?id=795940 --- libgdm/gdm-client.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c index bcae8ba..c017bf8 100644 --- a/libgdm/gdm-client.c +++ b/libgdm/gdm-client.c @@ -583,6 +583,8 @@ gdm_client_open_connection_finish (GdmClient *client, if (client->priv->connection == NULL) { client->priv->connection = g_steal_pointer (&connection); + } else if (client->priv->connection == connection) { + connection = NULL; } finish_pending_opens (client, NULL); -- 2.24.1 From 1dd46a7e864038af87600140c06a8976d7160f67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net> Date: Wed, 9 May 2018 15:43:27 +0100 Subject: [PATCH 04/10] libgdm: add weak pointer for connection object At the moment we fail to nullify GdmClient's connection to GDM when the connection is disposed. This commit adds a weak pointer to correct that mistake. https://bugzilla.gnome.org/show_bug.cgi?id=795940 --- libgdm/gdm-client.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c index c017bf8..b5f3530 100644 --- a/libgdm/gdm-client.c +++ b/libgdm/gdm-client.c @@ -460,6 +460,10 @@ gdm_client_open_connection_sync (GdmClient *client, g_clear_pointer (&client->priv->address, g_free); goto out; } + + g_object_add_weak_pointer (G_OBJECT (client->priv->connection), + (gpointer *) + &client->priv->connection); } else { client->priv->connection = g_object_ref (client->priv->connection); } @@ -583,6 +587,8 @@ gdm_client_open_connection_finish (GdmClient *client, if (client->priv->connection == NULL) { client->priv->connection = g_steal_pointer (&connection); + g_object_add_weak_pointer (G_OBJECT (client->priv->connection), + (gpointer *) &client->priv->connection); } else if (client->priv->connection == connection) { connection = NULL; } @@ -1616,6 +1622,12 @@ gdm_client_finalize (GObject *object) &client->priv->chooser); } + if (client->priv->connection != NULL) { + g_object_remove_weak_pointer (G_OBJECT (client->priv->connection), + (gpointer *) + &client->priv->connection); + } + g_clear_object (&client->priv->manager); g_clear_object (&client->priv->connection); -- 2.24.1 From 539c76cbc72d56a51941ea8a9246c095ef53e212 Mon Sep 17 00:00:00 2001 From: Ray Strode <rstrode@redhat.com> Date: Mon, 14 May 2018 14:48:31 -0400 Subject: [PATCH 05/10] libgdm: drop support for serializing multiple opens Right now libgdm tries to handle multiple simultaneous open calls at the same time by serializing the requests and giving them all the same connection. It's broken, though. - The pending_opens list is never populated, so we end up just doing multiple simultaneous open operations at a time anyway. - The finish code ends up calling g_task_return_error (task, NULL) instead of g_task_return_pointer in the non-error case. Since the feature doesn't work, drop it for now. https://bugzilla.gnome.org/show_bug.cgi?id=795940 --- libgdm/gdm-client.c | 111 ++++++++++++++++---------------------------- 1 file changed, 40 insertions(+), 71 deletions(-) diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c index b5f3530..61bcbd3 100644 --- a/libgdm/gdm-client.c +++ b/libgdm/gdm-client.c @@ -51,7 +51,6 @@ struct GdmClientPrivate GDBusConnection *connection; char *address; - GList *pending_opens; char **enabled_extensions; }; @@ -421,53 +420,50 @@ gdm_client_open_connection_sync (GdmClient *client, g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); - if (client->priv->manager == NULL) { - client->priv->manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_NONE, - "org.gnome.DisplayManager", - "/org/gnome/DisplayManager/Manager", - cancellable, - error); - - if (client->priv->manager == NULL) { - goto out; - } - } else { - client->priv->manager = g_object_ref (client->priv->manager); + if (client->priv->connection != NULL) { + g_object_ref (client->priv->connection); + return TRUE; } - if (client->priv->connection == NULL) { - ret = gdm_manager_call_open_session_sync (client->priv->manager, - &client->priv->address, - cancellable, - error); + client->priv->manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, + G_DBUS_PROXY_FLAGS_NONE, + "org.gnome.DisplayManager", + "/org/gnome/DisplayManager/Manager", + cancellable, + error); - if (!ret) { - g_clear_object (&client->priv->manager); - goto out; - } + if (client->priv->manager == NULL) { + goto out; + } - g_debug ("GdmClient: connecting to address: %s", client->priv->address); + ret = gdm_manager_call_open_session_sync (client->priv->manager, + &client->priv->address, + cancellable, + error); - client->priv->connection = g_dbus_connection_new_for_address_sync (client->priv->address, - G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, - NULL, - cancellable, - error); + if (!ret) { + g_clear_object (&client->priv->manager); + goto out; + } - if (client->priv->connection == NULL) { - g_clear_object (&client->priv->manager); - g_clear_pointer (&client->priv->address, g_free); - goto out; - } + g_debug ("GdmClient: connecting to address: %s", client->priv->address); - g_object_add_weak_pointer (G_OBJECT (client->priv->connection), - (gpointer *) - &client->priv->connection); - } else { - client->priv->connection = g_object_ref (client->priv->connection); + client->priv->connection = g_dbus_connection_new_for_address_sync (client->priv->address, + G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, + NULL, + cancellable, + error); + + if (client->priv->connection == NULL) { + g_clear_object (&client->priv->manager); + g_clear_pointer (&client->priv->address, g_free); + goto out; } + g_object_add_weak_pointer (G_OBJECT (client->priv->connection), + (gpointer *) + &client->priv->connection); + out: return client->priv->connection != NULL; } @@ -551,25 +547,6 @@ on_got_manager_for_opening_connection (GdmClient *client, task); } -static void -finish_pending_opens (GdmClient *client, - GError *error) -{ - GList *node; - - for (node = client->priv->pending_opens; - node != NULL; - node = node->next) { - - GTask *task = node->data; - - g_task_return_error (task, error); - g_object_unref (task); - } - g_clear_pointer (&client->priv->pending_opens, - (GDestroyNotify) g_list_free); -} - static gboolean gdm_client_open_connection_finish (GdmClient *client, GAsyncResult *result, @@ -581,7 +558,6 @@ gdm_client_open_connection_finish (GdmClient *client, connection = g_task_propagate_pointer (G_TASK (result), error); if (connection == NULL) { - finish_pending_opens (client, *error); return FALSE; } @@ -593,7 +569,6 @@ gdm_client_open_connection_finish (GdmClient *client, connection = NULL; } - finish_pending_opens (client, NULL); return TRUE; } @@ -620,17 +595,11 @@ gdm_client_open_connection (GdmClient *client, return; } - if (client->priv->pending_opens == NULL) { - get_manager (client, - cancellable, - (GAsyncReadyCallback) - on_got_manager_for_opening_connection, - task); - } else { - client->priv->pending_opens = g_list_prepend (client->priv->pending_opens, - task); - } - + get_manager (client, + cancellable, + (GAsyncReadyCallback) + on_got_manager_for_opening_connection, + task); } /** -- 2.24.1 From 5e2eb40f69b7171073b4a1edac593e6fb4535667 Mon Sep 17 00:00:00 2001 From: Ray Strode <rstrode@redhat.com> Date: Mon, 14 May 2018 15:49:50 -0400 Subject: [PATCH 06/10] libgdm: fix pointer/boolean task confusion The manager fetching code in GdmClient treats its task return value as boolean, but it's actually a pointer (the manager) This commit corrects the confusion. https://bugzilla.gnome.org/show_bug.cgi?id=795940 --- libgdm/gdm-client.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c index 61bcbd3..a4a0e28 100644 --- a/libgdm/gdm-client.c +++ b/libgdm/gdm-client.c @@ -390,11 +390,13 @@ on_got_manager_for_reauthentication (GdmClient *client, GTask *task) { GCancellable *cancellable; + GdmManager *manager; char *username; GError *error; error = NULL; - if (!g_task_propagate_boolean (G_TASK (result), &error)) { + manager = g_task_propagate_pointer (G_TASK (result), &error); + if (manager == NULL) { g_task_return_error (task, error); g_object_unref (task); return; @@ -530,10 +532,12 @@ on_got_manager_for_opening_connection (GdmClient *client, GTask *task) { GCancellable *cancellable; + GdmManager *manager; GError *error; error = NULL; - if (!g_task_propagate_boolean (G_TASK (result), &error)) { + manager = g_task_propagate_pointer (G_TASK (result), &error); + if (manager == NULL) { g_task_return_error (task, error); g_object_unref (task); return; -- 2.24.1 From 269d33cd47734299f50eb0d3a410795a7cd0a357 Mon Sep 17 00:00:00 2001 From: Ray Strode <rstrode@redhat.com> Date: Mon, 14 May 2018 15:57:14 -0400 Subject: [PATCH 07/10] libgdm: don't keep manager proxy around longer than we need it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Right now we keep the manager proxy alive long after we need it. It doesn't get cleared until one of the other proxies go away. That is not only unnecessary but illogical and confusing. This commit changes the manager proxy to be transient—only alive long enough to get what we need from it. https://bugzilla.gnome.org/show_bug.cgi?id=795940 --- libgdm/gdm-client.c | 119 ++++++++++---------------------------------- 1 file changed, 26 insertions(+), 93 deletions(-) diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c index a4a0e28..c34121e 100644 --- a/libgdm/gdm-client.c +++ b/libgdm/gdm-client.c @@ -40,8 +40,6 @@ struct GdmClientPrivate { - GdmManager *manager; - GdmUserVerifier *user_verifier; GHashTable *user_verifier_extensions; @@ -74,34 +72,24 @@ gdm_client_error_quark (void) } static void -on_got_manager (GdmManager *manager, +on_got_manager (GObject *object, GAsyncResult *result, GTask *task) { GdmClient *client; - GdmManager *new_manager; - GError *error; + GError *error; + g_autoptr(GdmManager) manager = NULL; client = GDM_CLIENT (g_async_result_get_source_object (G_ASYNC_RESULT (task))); error = NULL; - new_manager = gdm_manager_proxy_new_finish (result, &error); - - if (client->priv->manager == NULL) { - client->priv->manager = new_manager; - - } else { - g_object_ref (client->priv->manager); - g_object_unref (new_manager); - - g_clear_error (&error); - } + manager = gdm_manager_proxy_new_finish (result, &error); if (error != NULL) { g_task_return_error (task, error); } else { g_task_return_pointer (task, - g_object_ref (client->priv->manager), + g_object_ref (manager), (GDestroyNotify) g_object_unref); } @@ -122,14 +110,6 @@ get_manager (GdmClient *client, callback, user_data); - if (client->priv->manager != NULL) { - g_task_return_pointer (task, - g_object_ref (client->priv->manager), - (GDestroyNotify) g_object_unref); - g_object_unref (task); - return; - } - gdm_manager_proxy_new_for_bus (G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, "org.gnome.DisplayManager", @@ -404,7 +384,7 @@ on_got_manager_for_reauthentication (GdmClient *client, cancellable = g_task_get_cancellable (task); username = g_object_get_data (G_OBJECT (task), "username"); - gdm_manager_call_open_reauthentication_channel (client->priv->manager, + gdm_manager_call_open_reauthentication_channel (manager, username, cancellable, (GAsyncReadyCallback) @@ -418,6 +398,7 @@ gdm_client_open_connection_sync (GdmClient *client, GCancellable *cancellable, GError **error) { + g_autoptr(GdmManager) manager = NULL; gboolean ret; g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); @@ -427,24 +408,23 @@ gdm_client_open_connection_sync (GdmClient *client, return TRUE; } - client->priv->manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_NONE, - "org.gnome.DisplayManager", - "/org/gnome/DisplayManager/Manager", - cancellable, - error); + manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, + G_DBUS_PROXY_FLAGS_NONE, + "org.gnome.DisplayManager", + "/org/gnome/DisplayManager/Manager", + cancellable, + error); - if (client->priv->manager == NULL) { + if (manager == NULL) { goto out; } - ret = gdm_manager_call_open_session_sync (client->priv->manager, + ret = gdm_manager_call_open_session_sync (manager, &client->priv->address, cancellable, error); if (!ret) { - g_clear_object (&client->priv->manager); goto out; } @@ -457,7 +437,6 @@ gdm_client_open_connection_sync (GdmClient *client, error); if (client->priv->connection == NULL) { - g_clear_object (&client->priv->manager); g_clear_pointer (&client->priv->address, g_free); goto out; } @@ -544,7 +523,7 @@ on_got_manager_for_opening_connection (GdmClient *client, } cancellable = g_task_get_cancellable (task); - gdm_manager_call_open_session (client->priv->manager, + gdm_manager_call_open_session (manager, cancellable, (GAsyncReadyCallback) on_session_opened, @@ -627,28 +606,25 @@ gdm_client_open_reauthentication_channel_sync (GdmClient *client, GError **error) { GDBusConnection *connection; + g_autoptr(GdmManager) manager = NULL; GdmUserVerifier *user_verifier = NULL; gboolean ret; char *address; g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); - if (client->priv->manager == NULL) { - client->priv->manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_NONE, - "org.gnome.DisplayManager", - "/org/gnome/DisplayManager/Manager", - cancellable, - error); + manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, + G_DBUS_PROXY_FLAGS_NONE, + "org.gnome.DisplayManager", + "/org/gnome/DisplayManager/Manager", + cancellable, + error); - if (client->priv->manager == NULL) { - goto out; - } - } else { - client->priv->manager = g_object_ref (client->priv->manager); + if (manager == NULL) { + goto out; } - ret = gdm_manager_call_open_reauthentication_channel_sync (client->priv->manager, + ret = gdm_manager_call_open_reauthentication_channel_sync (manager, username, &address, cancellable, @@ -684,11 +660,6 @@ gdm_client_open_reauthentication_channel_sync (GdmClient *client, (GWeakNotify) g_object_unref, connection); - - g_object_weak_ref (G_OBJECT (user_verifier), - (GWeakNotify) - g_clear_object, - &client->priv->manager); } out: @@ -791,10 +762,6 @@ gdm_client_get_user_verifier_sync (GdmClient *client, g_object_add_weak_pointer (G_OBJECT (client->priv->user_verifier), (gpointer *) &client->priv->user_verifier); - g_object_weak_ref (G_OBJECT (client->priv->user_verifier), - (GWeakNotify) - g_clear_object, - &client->priv->manager); g_object_weak_ref (G_OBJECT (client->priv->user_verifier), (GWeakNotify) g_clear_object, @@ -941,11 +908,6 @@ gdm_client_get_user_verifier_finish (GdmClient *client, g_object_unref, client->priv->connection); - g_object_weak_ref (G_OBJECT (client->priv->user_verifier), - (GWeakNotify) - g_clear_object, - &client->priv->manager); - return user_verifier; } @@ -1115,12 +1077,6 @@ gdm_client_get_greeter_finish (GdmClient *client, (GWeakNotify) g_object_unref, client->priv->connection); - - g_object_weak_ref (G_OBJECT (client->priv->greeter), - (GWeakNotify) - g_clear_object, - &client->priv->manager); - return greeter; } @@ -1161,10 +1117,6 @@ gdm_client_get_greeter_sync (GdmClient *client, g_object_add_weak_pointer (G_OBJECT (client->priv->greeter), (gpointer *) &client->priv->greeter); - g_object_weak_ref (G_OBJECT (client->priv->greeter), - (GWeakNotify) - g_clear_object, - &client->priv->manager); g_object_weak_ref (G_OBJECT (client->priv->greeter), (GWeakNotify) g_clear_object, @@ -1301,11 +1253,6 @@ gdm_client_get_remote_greeter_finish (GdmClient *client, g_object_unref, client->priv->connection); - g_object_weak_ref (G_OBJECT (client->priv->remote_greeter), - (GWeakNotify) - g_clear_object, - &client->priv->manager); - return remote_greeter; } @@ -1345,10 +1292,6 @@ gdm_client_get_remote_greeter_sync (GdmClient *client, g_object_add_weak_pointer (G_OBJECT (client->priv->remote_greeter), (gpointer *) &client->priv->remote_greeter); - g_object_weak_ref (G_OBJECT (client->priv->remote_greeter), - (GWeakNotify) - g_clear_object, - &client->priv->manager); g_object_weak_ref (G_OBJECT (client->priv->remote_greeter), (GWeakNotify) g_clear_object, @@ -1483,11 +1426,6 @@ gdm_client_get_chooser_finish (GdmClient *client, g_object_unref, client->priv->connection); - g_object_weak_ref (G_OBJECT (client->priv->chooser), - (GWeakNotify) - g_clear_object, - &client->priv->manager); - return chooser; } @@ -1528,10 +1466,6 @@ gdm_client_get_chooser_sync (GdmClient *client, g_object_add_weak_pointer (G_OBJECT (client->priv->chooser), (gpointer *) &client->priv->chooser); - g_object_weak_ref (G_OBJECT (client->priv->chooser), - (GWeakNotify) - g_clear_object, - &client->priv->manager); g_object_weak_ref (G_OBJECT (client->priv->chooser), (GWeakNotify) g_clear_object, @@ -1601,7 +1535,6 @@ gdm_client_finalize (GObject *object) &client->priv->connection); } - g_clear_object (&client->priv->manager); g_clear_object (&client->priv->connection); g_strfreev (client->priv->enabled_extensions); -- 2.24.1 From c579b7ee311710a8cfb47f2d753183ff88c62dd8 Mon Sep 17 00:00:00 2001 From: Ray Strode <rstrode@redhat.com> Date: Tue, 15 May 2018 17:02:36 -0400 Subject: [PATCH 08/10] libgdm: use g_object_unref instead of g_clear_object for weakrefs At the moment we add a weakref on each proxy to the connection object. For the _sync variant functions, When the weakref fires, they call g_clear_object, clearing the connection, even if other proxies still have a reference. This commit changes that weak ref code to use g_object_unref instead. https://bugzilla.gnome.org/show_bug.cgi?id=795940 --- libgdm/gdm-client.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c index c34121e..e02e3ea 100644 --- a/libgdm/gdm-client.c +++ b/libgdm/gdm-client.c @@ -764,8 +764,8 @@ gdm_client_get_user_verifier_sync (GdmClient *client, &client->priv->user_verifier); g_object_weak_ref (G_OBJECT (client->priv->user_verifier), (GWeakNotify) - g_clear_object, - &client->priv->connection); + g_object_unref, + client->priv->connection); if (client->priv->enabled_extensions != NULL) { gboolean res; @@ -1119,8 +1119,8 @@ gdm_client_get_greeter_sync (GdmClient *client, &client->priv->greeter); g_object_weak_ref (G_OBJECT (client->priv->greeter), (GWeakNotify) - g_clear_object, - &client->priv->connection); + g_object_unref, + client->priv->connection); query_for_timed_login_requested_signal (client->priv->greeter); } @@ -1294,8 +1294,8 @@ gdm_client_get_remote_greeter_sync (GdmClient *client, &client->priv->remote_greeter); g_object_weak_ref (G_OBJECT (client->priv->remote_greeter), (GWeakNotify) - g_clear_object, - &client->priv->connection); + g_object_unref, + client->priv->connection); } return client->priv->remote_greeter; @@ -1468,8 +1468,8 @@ gdm_client_get_chooser_sync (GdmClient *client, &client->priv->chooser); g_object_weak_ref (G_OBJECT (client->priv->chooser), (GWeakNotify) - g_clear_object, - &client->priv->connection); + g_object_unref, + client->priv->connection); } return client->priv->chooser; -- 2.24.1 From c83a952af7d327173231fd67c5f593baab9d50ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net> Date: Mon, 14 May 2018 16:32:25 -0400 Subject: [PATCH 09/10] libgdm: get connection explicitly At the moment we call gdm_client_open_connection and when it finishes, assume client->priv->connection is implicitly initialized. This commit makes the operation more explicit by changing gdm_client_open_connection to gdm_client_get_connection and returning the GDBusConnection object directly, instead of returning a boolean. https://bugzilla.gnome.org/show_bug.cgi?id=795940 --- libgdm/gdm-client.c | 136 ++++++++++++++++++++++++++------------------ 1 file changed, 82 insertions(+), 54 deletions(-) diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c index e02e3ea..e7b93e3 100644 --- a/libgdm/gdm-client.c +++ b/libgdm/gdm-client.c @@ -393,10 +393,10 @@ on_got_manager_for_reauthentication (GdmClient *client, } -static gboolean -gdm_client_open_connection_sync (GdmClient *client, - GCancellable *cancellable, - GError **error) +static GDBusConnection * +gdm_client_get_connection_sync (GdmClient *client, + GCancellable *cancellable, + GError **error) { g_autoptr(GdmManager) manager = NULL; gboolean ret; @@ -404,8 +404,7 @@ gdm_client_open_connection_sync (GdmClient *client, g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); if (client->priv->connection != NULL) { - g_object_ref (client->priv->connection); - return TRUE; + return g_object_ref (client->priv->connection); } manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, @@ -446,7 +445,7 @@ gdm_client_open_connection_sync (GdmClient *client, &client->priv->connection); out: - return client->priv->connection != NULL; + return client->priv->connection; } static void @@ -530,33 +529,31 @@ on_got_manager_for_opening_connection (GdmClient *client, task); } -static gboolean -gdm_client_open_connection_finish (GdmClient *client, - GAsyncResult *result, - GError **error) +static GDBusConnection * +gdm_client_get_connection_finish (GdmClient *client, + GAsyncResult *result, + GError **error) { - g_autoptr(GDBusConnection) connection = NULL; + GDBusConnection *connection = NULL; g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); connection = g_task_propagate_pointer (G_TASK (result), error); if (connection == NULL) { - return FALSE; + return NULL; } if (client->priv->connection == NULL) { - client->priv->connection = g_steal_pointer (&connection); + client->priv->connection = connection; g_object_add_weak_pointer (G_OBJECT (client->priv->connection), (gpointer *) &client->priv->connection); - } else if (client->priv->connection == connection) { - connection = NULL; } - return TRUE; + return g_object_ref (connection); } static void -gdm_client_open_connection (GdmClient *client, +gdm_client_get_connection (GdmClient *client, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) @@ -743,15 +740,19 @@ gdm_client_get_user_verifier_sync (GdmClient *client, GCancellable *cancellable, GError **error) { + g_autoptr(GDBusConnection) connection = NULL; + if (client->priv->user_verifier != NULL) { return g_object_ref (client->priv->user_verifier); } - if (!gdm_client_open_connection_sync (client, cancellable, error)) { + connection = gdm_client_get_connection_sync (client, cancellable, error); + + if (connection == NULL) { return NULL; } - client->priv->user_verifier = gdm_user_verifier_proxy_new_sync (client->priv->connection, + client->priv->user_verifier = gdm_user_verifier_proxy_new_sync (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, SESSION_DBUS_PATH, @@ -762,6 +763,7 @@ gdm_client_get_user_verifier_sync (GdmClient *client, g_object_add_weak_pointer (G_OBJECT (client->priv->user_verifier), (gpointer *) &client->priv->user_verifier); + g_object_ref (connection); g_object_weak_ref (G_OBJECT (client->priv->user_verifier), (GWeakNotify) g_object_unref, @@ -805,22 +807,25 @@ gdm_client_get_user_verifier_sync (GdmClient *client, } static void -on_connection_opened_for_user_verifier (GdmClient *client, - GAsyncResult *result, - GTask *task) +on_connection_for_user_verifier (GdmClient *client, + GAsyncResult *result, + GTask *task) { + g_autoptr(GDBusConnection) connection = NULL; GCancellable *cancellable; GError *error; error = NULL; - if (!gdm_client_open_connection_finish (client, result, &error)) { + connection = gdm_client_get_connection_finish (client, result, &error); + + if (connection == NULL) { g_task_return_error (task, error); g_object_unref (task); return; } cancellable = g_task_get_cancellable (task); - gdm_user_verifier_proxy_new (client->priv->connection, + gdm_user_verifier_proxy_new (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, SESSION_DBUS_PATH, @@ -863,10 +868,10 @@ gdm_client_get_user_verifier (GdmClient *client, return; } - gdm_client_open_connection (client, + gdm_client_get_connection (client, cancellable, (GAsyncReadyCallback) - on_connection_opened_for_user_verifier, + on_connection_for_user_verifier, task); } @@ -975,22 +980,25 @@ on_greeter_proxy_created (GObject *source, } static void -on_connection_opened_for_greeter (GdmClient *client, - GAsyncResult *result, - GTask *task) +on_connection_for_greeter (GdmClient *client, + GAsyncResult *result, + GTask *task) { + g_autoptr(GDBusConnection) connection = NULL; GCancellable *cancellable; GError *error; error = NULL; - if (!gdm_client_open_connection_finish (client, result, &error)) { + connection = gdm_client_get_connection_finish (client, result, &error); + + if (connection == NULL) { g_task_return_error (task, error); g_object_unref (task); return; } cancellable = g_task_get_cancellable (task); - gdm_greeter_proxy_new (client->priv->connection, + gdm_greeter_proxy_new (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, SESSION_DBUS_PATH, @@ -1033,10 +1041,10 @@ gdm_client_get_greeter (GdmClient *client, return; } - gdm_client_open_connection (client, + gdm_client_get_connection (client, cancellable, (GAsyncReadyCallback) - on_connection_opened_for_greeter, + on_connection_for_greeter, task); } @@ -1098,15 +1106,19 @@ gdm_client_get_greeter_sync (GdmClient *client, GCancellable *cancellable, GError **error) { + g_autoptr(GDBusConnection) connection = NULL; + if (client->priv->greeter != NULL) { return g_object_ref (client->priv->greeter); } - if (!gdm_client_open_connection_sync (client, cancellable, error)) { + connection = gdm_client_get_connection_sync (client, cancellable, error); + + if (connection == NULL) { return NULL; } - client->priv->greeter = gdm_greeter_proxy_new_sync (client->priv->connection, + client->priv->greeter = gdm_greeter_proxy_new_sync (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, SESSION_DBUS_PATH, @@ -1150,22 +1162,25 @@ on_remote_greeter_proxy_created (GObject *object, } static void -on_connection_opened_for_remote_greeter (GdmClient *client, - GAsyncResult *result, - GTask *task) +on_connection_for_remote_greeter (GdmClient *client, + GAsyncResult *result, + GTask *task) { + g_autoptr(GDBusConnection) connection = NULL; GCancellable *cancellable; GError *error; error = NULL; - if (!gdm_client_open_connection_finish (client, result, &error)) { + connection = gdm_client_get_connection_finish (client, result, &error); + + if (connection == NULL) { g_task_return_error (task, error); g_object_unref (task); return; } cancellable = g_task_get_cancellable (task); - gdm_remote_greeter_proxy_new (client->priv->connection, + gdm_remote_greeter_proxy_new (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, SESSION_DBUS_PATH, @@ -1208,10 +1223,10 @@ gdm_client_get_remote_greeter (GdmClient *client, return; } - gdm_client_open_connection (client, + gdm_client_get_connection (client, cancellable, (GAsyncReadyCallback) - on_connection_opened_for_remote_greeter, + on_connection_for_remote_greeter, task); } @@ -1273,15 +1288,19 @@ gdm_client_get_remote_greeter_sync (GdmClient *client, GCancellable *cancellable, GError **error) { + g_autoptr(GDBusConnection) connection = NULL; + if (client->priv->remote_greeter != NULL) { return g_object_ref (client->priv->remote_greeter); } - if (!gdm_client_open_connection_sync (client, cancellable, error)) { + connection = gdm_client_get_connection_sync (client, cancellable, error); + + if (connection == NULL) { return NULL; } - client->priv->remote_greeter = gdm_remote_greeter_proxy_new_sync (client->priv->connection, + client->priv->remote_greeter = gdm_remote_greeter_proxy_new_sync (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, SESSION_DBUS_PATH, @@ -1292,6 +1311,7 @@ gdm_client_get_remote_greeter_sync (GdmClient *client, g_object_add_weak_pointer (G_OBJECT (client->priv->remote_greeter), (gpointer *) &client->priv->remote_greeter); + g_object_ref (connection); g_object_weak_ref (G_OBJECT (client->priv->remote_greeter), (GWeakNotify) g_object_unref, @@ -1323,22 +1343,25 @@ on_chooser_proxy_created (GObject *source, } static void -on_connection_opened_for_chooser (GdmClient *client, - GAsyncResult *result, - GTask *task) +on_connection_for_chooser (GdmClient *client, + GAsyncResult *result, + GTask *task) { + g_autoptr(GDBusConnection) connection = NULL; GCancellable *cancellable; GError *error; error = NULL; - if (!gdm_client_open_connection_finish (client, result, &error)) { + connection = gdm_client_get_connection_finish (client, result, &error); + + if (connection == NULL) { g_task_return_error (task, error); g_object_unref (task); return; } cancellable = g_task_get_cancellable (task); - gdm_chooser_proxy_new (client->priv->connection, + gdm_chooser_proxy_new (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, SESSION_DBUS_PATH, @@ -1381,10 +1404,10 @@ gdm_client_get_chooser (GdmClient *client, return; } - gdm_client_open_connection (client, + gdm_client_get_connection (client, cancellable, (GAsyncReadyCallback) - on_connection_opened_for_chooser, + on_connection_for_chooser, task); } @@ -1421,6 +1444,7 @@ gdm_client_get_chooser_finish (GdmClient *client, (gpointer *) &client->priv->chooser); + g_object_ref (connection); g_object_weak_ref (G_OBJECT (client->priv->chooser), (GWeakNotify) g_object_unref, @@ -1446,16 +1470,19 @@ gdm_client_get_chooser_sync (GdmClient *client, GCancellable *cancellable, GError **error) { + g_autoptr(GDBusConnection) connection = NULL; if (client->priv->chooser != NULL) { return g_object_ref (client->priv->chooser); } - if (!gdm_client_open_connection_sync (client, cancellable, error)) { + connection = gdm_client_get_connection_sync (client, cancellable, error); + + if (connection == NULL) { return NULL; } - client->priv->chooser = gdm_chooser_proxy_new_sync (client->priv->connection, + client->priv->chooser = gdm_chooser_proxy_new_sync (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, SESSION_DBUS_PATH, @@ -1466,6 +1493,7 @@ gdm_client_get_chooser_sync (GdmClient *client, g_object_add_weak_pointer (G_OBJECT (client->priv->chooser), (gpointer *) &client->priv->chooser); + g_object_ref (connection); g_object_weak_ref (G_OBJECT (client->priv->chooser), (GWeakNotify) g_object_unref, -- 2.24.1 From f899910c500e0a298cecbd900983a62bc795f76d Mon Sep 17 00:00:00 2001 From: Iain Lane <iainl@gnome.org> Date: Mon, 14 May 2018 16:32:25 -0400 Subject: [PATCH 10/10] libgdm: Drop weak refs on the GDBusConnection The GDBusProxies hold a strong reference to the connection themselves, so maintaining separate weak references is unnecessary. This commit drops those extraneous weak references. https://bugzilla.gnome.org/show_bug.cgi?id=795940 --- libgdm/gdm-client.c | 47 --------------------------------------------- 1 file changed, 47 deletions(-) diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c index e7b93e3..f327344 100644 --- a/libgdm/gdm-client.c +++ b/libgdm/gdm-client.c @@ -652,13 +652,6 @@ gdm_client_open_reauthentication_channel_sync (GdmClient *client, cancellable, error); - if (user_verifier != NULL) { - g_object_weak_ref (G_OBJECT (user_verifier), - (GWeakNotify) - g_object_unref, - connection); - } - out: return user_verifier; } @@ -763,12 +756,6 @@ gdm_client_get_user_verifier_sync (GdmClient *client, g_object_add_weak_pointer (G_OBJECT (client->priv->user_verifier), (gpointer *) &client->priv->user_verifier); - g_object_ref (connection); - g_object_weak_ref (G_OBJECT (client->priv->user_verifier), - (GWeakNotify) - g_object_unref, - client->priv->connection); - if (client->priv->enabled_extensions != NULL) { gboolean res; @@ -908,11 +895,6 @@ gdm_client_get_user_verifier_finish (GdmClient *client, (gpointer *) &client->priv->user_verifier); - g_object_weak_ref (G_OBJECT (client->priv->user_verifier), - (GWeakNotify) - g_object_unref, - client->priv->connection); - return user_verifier; } @@ -1081,10 +1063,6 @@ gdm_client_get_greeter_finish (GdmClient *client, (gpointer *) &client->priv->greeter); - g_object_weak_ref (G_OBJECT (client->priv->greeter), - (GWeakNotify) - g_object_unref, - client->priv->connection); return greeter; } @@ -1129,10 +1107,6 @@ gdm_client_get_greeter_sync (GdmClient *client, g_object_add_weak_pointer (G_OBJECT (client->priv->greeter), (gpointer *) &client->priv->greeter); - g_object_weak_ref (G_OBJECT (client->priv->greeter), - (GWeakNotify) - g_object_unref, - client->priv->connection); query_for_timed_login_requested_signal (client->priv->greeter); } @@ -1263,11 +1237,6 @@ gdm_client_get_remote_greeter_finish (GdmClient *client, (gpointer *) &client->priv->remote_greeter); - g_object_weak_ref (G_OBJECT (client->priv->remote_greeter), - (GWeakNotify) - g_object_unref, - client->priv->connection); - return remote_greeter; } @@ -1311,11 +1280,6 @@ gdm_client_get_remote_greeter_sync (GdmClient *client, g_object_add_weak_pointer (G_OBJECT (client->priv->remote_greeter), (gpointer *) &client->priv->remote_greeter); - g_object_ref (connection); - g_object_weak_ref (G_OBJECT (client->priv->remote_greeter), - (GWeakNotify) - g_object_unref, - client->priv->connection); } return client->priv->remote_greeter; @@ -1444,12 +1408,6 @@ gdm_client_get_chooser_finish (GdmClient *client, (gpointer *) &client->priv->chooser); - g_object_ref (connection); - g_object_weak_ref (G_OBJECT (client->priv->chooser), - (GWeakNotify) - g_object_unref, - client->priv->connection); - return chooser; } @@ -1493,11 +1451,6 @@ gdm_client_get_chooser_sync (GdmClient *client, g_object_add_weak_pointer (G_OBJECT (client->priv->chooser), (gpointer *) &client->priv->chooser); - g_object_ref (connection); - g_object_weak_ref (G_OBJECT (client->priv->chooser), - (GWeakNotify) - g_object_unref, - client->priv->connection); } return client->priv->chooser; -- 2.24.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor