[Spice-devel] [PATCH 05/14] smartcard-manager: Use GTask instead of GSimpleAsyncResult
Fabiano FidĂȘncio
fidencio at redhat.com
Wed Jan 20 04:40:39 PST 2016
On Mon, Jan 18, 2016 at 11:39 AM, Christophe Fergeau
<cfergeau at redhat.com> wrote:
> On Mon, Jan 18, 2016 at 10:05:41AM +0100, Fabiano FidĂȘncio wrote:
>> Instead of using GSimpleAsyncResult, use the new GTask API, which is
>> much more straightforward.
>> ---
>> src/smartcard-manager.c | 33 +++++++++++++--------------------
>> 1 file changed, 13 insertions(+), 20 deletions(-)
>>
>> diff --git a/src/smartcard-manager.c b/src/smartcard-manager.c
>> index 6578328..2310ab6 100644
>> --- a/src/smartcard-manager.c
>> +++ b/src/smartcard-manager.c
>> @@ -476,8 +476,9 @@ end:
>> return retval;
>> }
>>
>> -static void smartcard_manager_init_helper(GSimpleAsyncResult *res,
>> - GObject *object,
>> +static void smartcard_manager_init_helper(GTask *task,
>> + gpointer object,
>> + gpointer task_data,
>> GCancellable *cancellable)
>> {
>> static GOnce smartcard_manager_once = G_ONCE_INIT;
>> @@ -492,8 +493,10 @@ static void smartcard_manager_init_helper(GSimpleAsyncResult *res,
>> (GThreadFunc)smartcard_manager_init,
>> &args);
>> if (args.err != NULL) {
>> - g_simple_async_result_set_from_error(res, args.err);
>> + g_task_return_error(task, args.err);
>> g_error_free(args.err);
>
> g_task_return_error() takes ownership of args.err, you cannot/do not
> need to free it afterwards.
Fixed locally.
>
>> + } else {
>> + g_task_return_boolean(task, TRUE);
>> }
>> }
>>
>> @@ -504,17 +507,10 @@ void spice_smartcard_manager_init_async(SpiceSession *session,
>> GAsyncReadyCallback callback,
>> gpointer opaque)
>> {
>> - GSimpleAsyncResult *res;
>> + GTask *task = g_task_new(session, cancellable, callback, opaque);
>>
>> - res = g_simple_async_result_new(G_OBJECT(session),
>> - callback,
>> - opaque,
>> - spice_smartcard_manager_init);
>> - g_simple_async_result_run_in_thread(res,
>> - smartcard_manager_init_helper,
>> - G_PRIORITY_DEFAULT,
>> - cancellable);
>> - g_object_unref(res);
>> + g_task_run_in_thread(task, smartcard_manager_init_helper);
>> + g_object_unref(task);
>> }
>>
>> G_GNUC_INTERNAL
>> @@ -522,21 +518,18 @@ gboolean spice_smartcard_manager_init_finish(SpiceSession *session,
>> GAsyncResult *result,
>> GError **err)
>> {
>> - GSimpleAsyncResult *simple;
>> + GTask *task = G_TASK(result);
>>
>> g_return_val_if_fail(SPICE_IS_SESSION(session), FALSE);
>> - g_return_val_if_fail(G_IS_SIMPLE_ASYNC_RESULT(result), FALSE);
>> + g_return_val_if_fail(G_IS_TASK(task), FALSE);
>>
>> SPICE_DEBUG("smartcard_manager_finish");
>>
>> - simple = G_SIMPLE_ASYNC_RESULT(result);
>> - g_return_val_if_fail(g_simple_async_result_get_source_tag(simple) == spice_smartcard_manager_init, FALSE);
>> - if (g_simple_async_result_propagate_error(simple, err))
>> - return FALSE;
>> + g_return_val_if_fail(g_task_get_source_tag(task) == spice_smartcard_manager_init, FALSE);
>
> Is this check working? Don't you need to call g_task_set_source_tag()
> for it to work?
Good point, I have to check it, but my understanding is that you're
right. I do have to call g_task_set_source_tag() for it to work.
I will change that and submit a v2.
>
> Christophe
More information about the Spice-devel
mailing list