[gnome-online-accounts] Port goa_provider_get_all() to GTask
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-online-accounts] Port goa_provider_get_all() to GTask
- Date: Thu, 28 Apr 2016 16:11:36 +0000 (UTC)
commit 19e40237ddc6febbe29daf73be74cf7e15e1cb32
Author: Christophe Fergeau <cfergeau redhat com>
Date: Mon Nov 23 18:15:29 2015 +0100
Port goa_provider_get_all() to GTask
https://bugzilla.gnome.org/show_bug.cgi?id=764157
src/goabackend/goaprovider.c | 29 ++++++++++++++++-------------
1 files changed, 16 insertions(+), 13 deletions(-)
---
diff --git a/src/goabackend/goaprovider.c b/src/goabackend/goaprovider.c
index a4f7eb5..6241009 100644
--- a/src/goabackend/goaprovider.c
+++ b/src/goabackend/goaprovider.c
@@ -1059,7 +1059,7 @@ typedef struct
{
GQueue ret;
gint pending_calls;
- GSimpleAsyncResult *result;
+ GTask *task;
} GetAllData;
static void
@@ -1106,11 +1106,9 @@ get_all_check_done (GetAllData *data)
g_queue_sort (&data->ret, (GCompareDataFunc) compare_providers, NULL);
/* Steal the list out of the GQueue. */
- g_simple_async_result_set_op_res_gpointer (data->result, data->ret.head,
- free_list_and_unref);
- g_simple_async_result_complete_in_idle (data->result);
+ g_task_return_pointer (data->task, data->ret.head, free_list_and_unref);
- g_object_unref (data->result);
+ g_object_unref (data->task);
g_slice_free (GetAllData, data);
}
@@ -1176,8 +1174,8 @@ goa_provider_get_all (GAsyncReadyCallback callback,
ensure_builtins_loaded ();
data = g_slice_new0 (GetAllData);
- data->result = g_simple_async_result_new (NULL, callback, user_data,
- goa_provider_get_all);
+ data->task = g_task_new (NULL, NULL, callback, user_data);
+ g_task_set_source_tag (data->task, goa_provider_get_all);
g_queue_init (&data->ret);
/* Load the normal providers. */
@@ -1226,22 +1224,27 @@ goa_provider_get_all_finish (GList **out_providers,
GAsyncResult *result,
GError **error)
{
- GSimpleAsyncResult *simple = (GSimpleAsyncResult *) result;
+ GTask *task = G_TASK (result);
GList *providers;
+ gboolean had_error;
- g_return_val_if_fail (g_simple_async_result_is_valid (result, NULL,
- goa_provider_get_all), FALSE);
+ g_return_val_if_fail (g_task_is_valid (result, NULL), FALSE);
+ g_return_val_if_fail (g_task_get_source_tag (task) == goa_provider_get_all, FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- if (g_simple_async_result_propagate_error (simple, error))
+ /* Workaround for bgo#764163 */
+ had_error = g_task_had_error (task);
+ providers = g_task_propagate_pointer (task, error);
+ if (had_error)
return FALSE;
if (out_providers != NULL)
{
- providers = g_simple_async_result_get_op_res_gpointer (simple);
- *out_providers = g_list_copy_deep (providers, (GCopyFunc) g_object_ref, NULL);
+ *out_providers = providers;
+ providers = NULL;
}
+ g_list_free_full (providers, g_object_unref);
return TRUE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]