[Libosinfo] [PATCH v3 1/5] Use GTask instead of GSimpleAsyncResult
Fabiano Fidêncio
fabiano at fidencio.org
Mon Jan 11 14:05:11 UTC 2016
Zeeshan
On Mon, Jan 11, 2016 at 2:59 PM, Zeeshan Ali (Khattak)
<zeeshanak at gnome.org> wrote:
> Hi fidencio,
>
> Thanks for doing this. Just some nits about commit log:
>
> On Mon, Jan 11, 2016 at 1:19 PM, Fabiano Fidêncio <fidencio at redhat.com> wrote:
>> Instead of using GSimpleAsyncResult, use the new GTask API, which is
>> much more straightforward.
>> For using the new GTask API, let's bump GIO (part of GLib) dependency
>> version to 2.36.
>
> * I prefer to put version bump in separate patch, cause it kinda is a
> separate change and it makes it hard to miss when writing release
> notes.
>
> * Empty lines before each paragraph please. Not really your fault.
> Seems this very annoying habit is getting widespread. :(
>
>> what is safe based on major distro support:
>
> The last line doesn't make sense grammatically (only questions start
> with 'what') and "safe" IMO is vague and incorrect here. Just say "All
> major distros have 2.36 or higher version available:"
I appreciate your comments but unfortunately I've already pushed the
series, sorry :-\
>
>> - Debian Jessie: glib-2.42
>> - RHEL-7.1: glib-2.40
>> - SLES12: glib-2.38
>> - Ubuntu LTS 14.04: glib-2.40
>> ---
>> configure.ac | 2 +-
>> osinfo/osinfo_install_script.c | 52 ++++++++++++++----------------------
>> osinfo/osinfo_media.c | 60 +++++++++++++++++-------------------------
>> osinfo/osinfo_tree.c | 34 +++++++++---------------
>> 4 files changed, 57 insertions(+), 91 deletions(-)
>>
>> diff --git a/configure.ac b/configure.ac
>> index 4154134..5c38b96 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -37,7 +37,7 @@ m4_if(m4_version_compare([2.61a.100],
>> m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
>>
>> PKG_CHECK_MODULES([GOBJECT], [gobject-2.0])
>> -PKG_CHECK_MODULES([GIO], [gio-2.0])
>> +PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.36])
>> PKG_CHECK_MODULES([SOUP], [libsoup-2.4 >= 2.42])
>> PKG_CHECK_MODULES([LIBXML], [libxml-2.0 >= 2.6.0])
>> PKG_CHECK_MODULES([LIBXSLT], [libxslt >= 1.0.0])
>> diff --git a/osinfo/osinfo_install_script.c b/osinfo/osinfo_install_script.c
>> index 9ded116..7f0d863 100644
>> --- a/osinfo/osinfo_install_script.c
>> +++ b/osinfo/osinfo_install_script.c
>> @@ -531,7 +531,7 @@ OsinfoAvatarFormat *osinfo_install_script_get_avatar_format(OsinfoInstallScript
>> }
>>
>> struct _OsinfoInstallScriptGenerateData {
>> - GSimpleAsyncResult *res;
>> + GTask *res;
>> OsinfoOs *os;
>> OsinfoMedia *media;
>> OsinfoInstallConfig *config;
>> @@ -551,8 +551,7 @@ static void osinfo_install_script_generate_data_free(OsinfoInstallScriptGenerate
>> }
>>
>> struct _OsinfoInstallScriptGenerateOutputData {
>> - GSimpleAsyncResult *res;
>> - GCancellable *cancellable;
>> + GTask *res;
>> GError *error;
>> GFile *file;
>> GFileOutputStream *stream;
>> @@ -882,7 +881,7 @@ static void osinfo_install_script_template_loaded(GObject *src,
>> NULL,
>> &error)) {
>> g_prefix_error(&error, _("Failed to load script template %s: "), uri);
>> - g_simple_async_result_take_error(data->res, error);
>> + g_task_return_error(data->res, error);
>> goto cleanup;
>> }
>>
>> @@ -897,15 +896,13 @@ static void osinfo_install_script_template_loaded(GObject *src,
>> data->config,
>> &error)) {
>> g_prefix_error(&error, _("Failed to apply script template %s: "), uri);
>> - g_simple_async_result_take_error(data->res, error);
>> + g_task_return_error(data->res, error);
>> goto cleanup;
>> }
>>
>> - g_simple_async_result_set_op_res_gpointer(data->res,
>> - output, NULL);
>> + g_task_return_pointer(data->res, output, NULL);
>>
>> cleanup:
>> - g_simple_async_result_complete(data->res);
>> osinfo_install_script_generate_data_free(data);
>> g_free(uri);
>> }
>> @@ -934,10 +931,10 @@ static void osinfo_install_script_generate_async_common(OsinfoInstallScript *scr
>> data->media = g_object_ref(media);
>> data->config = g_object_ref(config);
>> data->script = g_object_ref(script);
>> - data->res = g_simple_async_result_new(G_OBJECT(script),
>> - callback,
>> - user_data,
>> - osinfo_install_script_generate_async_common);
>> + data->res = g_task_new(G_OBJECT(script),
>> + cancellable,
>> + callback,
>> + user_data);
>>
>> if (templateData) {
>> GError *error = NULL;
>> @@ -952,14 +949,11 @@ static void osinfo_install_script_generate_async_common(OsinfoInstallScript *scr
>> data->config,
>> &error)) {
>> g_prefix_error(&error, "%s", _("Failed to apply script template: "));
>> - g_simple_async_result_take_error(data->res, error);
>> - g_simple_async_result_complete(data->res);
>> + g_task_return_error(data->res, error);
>> osinfo_install_script_generate_data_free(data);
>> return;
>> }
>> - g_simple_async_result_set_op_res_gpointer(data->res,
>> - output, NULL);
>> - g_simple_async_result_complete_in_idle(data->res);
>> + g_task_return_pointer(data->res, output, NULL);
>> osinfo_install_script_generate_data_free(data);
>> } else {
>> GFile *file = g_file_new_for_uri(templateUri);
>> @@ -1007,14 +1001,11 @@ static gpointer osinfo_install_script_generate_finish_common(OsinfoInstallScript
>> GAsyncResult *res,
>> GError **error)
>> {
>> - GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT(res);
>> + GTask *task = G_TASK(res);
>>
>> g_return_val_if_fail(error == NULL || *error == NULL, NULL);
>>
>> - if (g_simple_async_result_propagate_error(simple, error))
>> - return NULL;
>> -
>> - return g_simple_async_result_get_op_res_gpointer(simple);
>> + return g_task_propagate_pointer(task, error);
>> }
>>
>> /**
>> @@ -1132,9 +1123,7 @@ static void osinfo_install_script_generate_output_close_file(GObject *src,
>> res,
>> &data->error);
>>
>> - g_simple_async_result_set_op_res_gpointer(data->res,
>> - data->file, NULL);
>> - g_simple_async_result_complete_in_idle(data->res);
>> + g_task_return_pointer(data->res, data->file, NULL);
>>
>> osinfo_install_script_generate_output_data_free(data);
>> }
>> @@ -1309,14 +1298,14 @@ static void osinfo_install_script_generate_output_write_file(GObject *src,
>> data->output + data->output_pos,
>> data->output_len - data->output_pos,
>> G_PRIORITY_DEFAULT,
>> - data->cancellable,
>> + g_task_get_cancellable(data->res),
>> osinfo_install_script_generate_output_write_file,
>> data);
>>
>> } else {
>> g_output_stream_close_async(G_OUTPUT_STREAM(data->stream),
>> G_PRIORITY_DEFAULT,
>> - data->cancellable,
>> + g_task_get_cancellable(data->res),
>> osinfo_install_script_generate_output_close_file,
>> data);
>> }
>> @@ -1338,12 +1327,11 @@ static void osinfo_install_script_generate_output_async_common(OsinfoInstallScri
>>
>> OsinfoInstallScriptGenerateSyncData *data_sync = user_data;
>>
>> - data->res = g_simple_async_result_new(G_OBJECT(script),
>> - callback,
>> - user_data,
>> - osinfo_install_script_generate_output_async_common);
>> + data->res = g_task_new(G_OBJECT(script),
>> + cancellable,
>> + callback,
>> + user_data);
>>
>> - data->cancellable = cancellable;
>> data->error = data_sync->error;
>> if (media != NULL) {
>> data->output = osinfo_install_script_generate_for_media(script,
>> diff --git a/osinfo/osinfo_media.c b/osinfo/osinfo_media.c
>> index 7ff48a9..d9fcba6 100644
>> --- a/osinfo/osinfo_media.c
>> +++ b/osinfo/osinfo_media.c
>> @@ -75,10 +75,7 @@ typedef struct _CreateFromLocationAsyncData CreateFromLocationAsyncData;
>> struct _CreateFromLocationAsyncData {
>> GFile *file;
>>
>> - gint priority;
>> - GCancellable *cancellable;
>> -
>> - GSimpleAsyncResult *res;
>> + GTask *res;
>>
>> PrimaryVolumeDescriptor pvd;
>> SupplementaryVolumeDescriptor svd;
>> @@ -91,7 +88,6 @@ static void create_from_location_async_data_free
>> (CreateFromLocationAsyncData *data)
>> {
>> g_object_unref(data->file);
>> - g_clear_object(&data->cancellable);
>> g_object_unref(data->res);
>>
>> g_slice_free(CreateFromLocationAsyncData, data);
>> @@ -707,8 +703,8 @@ static void on_svd_read(GObject *source,
>> g_input_stream_read_async(stream,
>> ((gchar *)&data->svd + data->offset),
>> data->length - data->offset,
>> - data->priority,
>> - data->cancellable,
>> + g_task_get_priority(data->res),
>> + g_task_get_cancellable(data->res),
>> on_svd_read,
>> data);
>> return;
>> @@ -760,10 +756,9 @@ static void on_svd_read(GObject *source,
>>
>> EXIT:
>> if (error != NULL)
>> - g_simple_async_result_take_error(data->res, error);
>> + g_task_return_error(data->res, error);
>> else
>> - g_simple_async_result_set_op_res_gpointer(data->res, media, NULL);
>> - g_simple_async_result_complete(data->res);
>> + g_task_return_pointer(data->res, media, NULL);
>>
>> g_object_unref(stream);
>> create_from_location_async_data_free(data);
>> @@ -800,8 +795,8 @@ static void on_pvd_read(GObject *source,
>> g_input_stream_read_async(stream,
>> ((gchar*)&data->pvd) + data->offset,
>> data->length - data->offset,
>> - data->priority,
>> - data->cancellable,
>> + g_task_get_priority(data->res),
>> + g_task_get_cancellable(data->res),
>> on_pvd_read,
>> data);
>> return;
>> @@ -827,15 +822,14 @@ static void on_pvd_read(GObject *source,
>> g_input_stream_read_async(stream,
>> (gchar *)&data->svd,
>> data->length,
>> - data->priority,
>> - data->cancellable,
>> + g_task_get_priority(data->res),
>> + g_task_get_cancellable(data->res),
>> on_svd_read,
>> data);
>> return;
>>
>> ON_ERROR:
>> - g_simple_async_result_take_error(data->res, error);
>> - g_simple_async_result_complete(data->res);
>> + g_task_return_error(data->res, error);
>> create_from_location_async_data_free(data);
>> }
>>
>> @@ -857,8 +851,7 @@ static void on_location_skipped(GObject *source,
>> OSINFO_MEDIA_ERROR,
>> OSINFO_MEDIA_ERROR_NO_DESCRIPTORS,
>> _("No volume descriptors"));
>> - g_simple_async_result_take_error(data->res, error);
>> - g_simple_async_result_complete(data->res);
>> + g_task_return_error(data->res, error);
>> create_from_location_async_data_free(data);
>>
>> return;
>> @@ -870,8 +863,8 @@ static void on_location_skipped(GObject *source,
>> g_input_stream_read_async(stream,
>> (gchar *)&data->pvd,
>> data->length,
>> - data->priority,
>> - data->cancellable,
>> + g_task_get_priority(data->res),
>> + g_task_get_cancellable(data->res),
>> on_pvd_read,
>> data);
>> }
>> @@ -889,8 +882,7 @@ static void on_location_read(GObject *source,
>> stream = g_file_read_finish(G_FILE(source), res, &error);
>> if (error != NULL) {
>> g_prefix_error(&error, _("Failed to open file"));
>> - g_simple_async_result_take_error(data->res, error);
>> - g_simple_async_result_complete(data->res);
>> + g_task_return_error(data->res, error);
>> create_from_location_async_data_free(data);
>>
>> return;
>> @@ -898,8 +890,8 @@ static void on_location_read(GObject *source,
>>
>> g_input_stream_skip_async(G_INPUT_STREAM(stream),
>> PVD_OFFSET,
>> - data->priority,
>> - data->cancellable,
>> + g_task_get_priority(data->res),
>> + g_task_get_cancellable(data->res),
>> on_location_skipped,
>> data);
>> }
>> @@ -925,14 +917,13 @@ void osinfo_media_create_from_location_async(const gchar *location,
>> g_return_if_fail(location != NULL);
>>
>> data = g_slice_new0(CreateFromLocationAsyncData);
>> - data->res = g_simple_async_result_new
>> - (NULL,
>> - callback,
>> - user_data,
>> - osinfo_media_create_from_location_async);
>> + data->res = g_task_new(NULL,
>> + cancellable,
>> + callback,
>> + user_data);
>> + g_task_set_priority(data->res, priority);
>> +
>> data->file = g_file_new_for_commandline_arg(location);
>> - data->priority = priority;
>> - data->cancellable = cancellable;
>> g_file_read_async(data->file,
>> priority,
>> cancellable,
>> @@ -953,14 +944,11 @@ void osinfo_media_create_from_location_async(const gchar *location,
>> OsinfoMedia *osinfo_media_create_from_location_finish(GAsyncResult *res,
>> GError **error)
>> {
>> - GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT(res);
>> + GTask *task = G_TASK(res);
>>
>> g_return_val_if_fail(error == NULL || *error == NULL, NULL);
>>
>> - if (g_simple_async_result_propagate_error(simple, error))
>> - return NULL;
>> -
>> - return g_simple_async_result_get_op_res_gpointer(simple);
>> + return g_task_propagate_pointer(task, error);
>> }
>>
>> /**
>> diff --git a/osinfo/osinfo_tree.c b/osinfo/osinfo_tree.c
>> index 55c572e..c80c62d 100644
>> --- a/osinfo/osinfo_tree.c
>> +++ b/osinfo/osinfo_tree.c
>> @@ -36,10 +36,7 @@ struct _CreateFromLocationAsyncData {
>> GFile *file;
>> gchar *location;
>>
>> - gint priority;
>> - GCancellable *cancellable;
>> -
>> - GSimpleAsyncResult *res;
>> + GTask *res;
>>
>> OsinfoTree *tree;
>> };
>> @@ -49,7 +46,6 @@ static void create_from_location_async_data_free(CreateFromLocationAsyncData *da
>> if (data->tree)
>> g_object_unref(data->tree);
>> g_object_unref(data->file);
>> - g_clear_object(&data->cancellable);
>> g_object_unref(data->res);
>>
>> g_slice_free(CreateFromLocationAsyncData, data);
>> @@ -604,8 +600,7 @@ static void on_location_read(GObject *source,
>> NULL,
>> &error)) {
>> g_prefix_error(&error, _("Failed to load .treeinfo file: "));
>> - g_simple_async_result_take_error(data->res, error);
>> - g_simple_async_result_complete(data->res);
>> + g_task_return_error(data->res, error);
>> create_from_location_async_data_free(data);
>> return;
>> }
>> @@ -615,14 +610,13 @@ static void on_location_read(GObject *source,
>> length,
>> &error))) {
>> g_prefix_error(&error, _("Failed to process keyinfo file: "));
>> - g_simple_async_result_take_error(data->res, error);
>> + g_task_return_error(data->res, error);
>> goto cleanup;
>> }
>>
>> - g_simple_async_result_set_op_res_gpointer(data->res, ret, NULL);
>> + g_task_return_pointer(data->res, ret, NULL);
>>
>> cleanup:
>> - g_simple_async_result_complete(data->res);
>> create_from_location_async_data_free(data);
>> g_free(content);
>> }
>> @@ -651,15 +645,14 @@ void osinfo_tree_create_from_location_async(const gchar *location,
>> treeinfo = g_strdup_printf("%s/.treeinfo", location);
>>
>> data = g_slice_new0(CreateFromLocationAsyncData);
>> - data->res = g_simple_async_result_new
>> - (NULL,
>> - callback,
>> - user_data,
>> - osinfo_tree_create_from_location_async);
>> + data->res = g_task_new(NULL,
>> + cancellable,
>> + callback,
>> + user_data);
>> + g_task_set_priority(data->res, priority);
>> +
>> data->file = g_file_new_for_uri(treeinfo);
>> data->location = g_strdup(location);
>> - data->priority = priority;
>> - data->cancellable = cancellable;
>>
>> /* XXX priority ? */
>> /* XXX probe other things besides just tree info */
>> @@ -685,14 +678,11 @@ void osinfo_tree_create_from_location_async(const gchar *location,
>> OsinfoTree *osinfo_tree_create_from_location_finish(GAsyncResult *res,
>> GError **error)
>> {
>> - GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT(res);
>> + GTask *task = G_TASK(res);
>>
>> g_return_val_if_fail(error == NULL || *error == NULL, NULL);
>>
>> - if (g_simple_async_result_propagate_error(simple, error))
>> - return NULL;
>> -
>> - return g_simple_async_result_get_op_res_gpointer(simple);
>> + return g_task_propagate_pointer(task, error);
>> }
>>
>> /**
>> --
>> 2.5.0
>>
>> _______________________________________________
>> Libosinfo mailing list
>> Libosinfo at redhat.com
>> https://www.redhat.com/mailman/listinfo/libosinfo
>
>
>
> --
> Regards,
>
> Zeeshan Ali (Khattak)
> ________________________________________
> Befriend GNOME: http://www.gnome.org/friends/
>
> _______________________________________________
> Libosinfo mailing list
> Libosinfo at redhat.com
> https://www.redhat.com/mailman/listinfo/libosinfo
--
Fabiano Fidêncio
More information about the Libosinfo
mailing list