[Spice-devel] [PATCH 05/14] smartcard-manager: Use GTask instead of GSimpleAsyncResult

Christophe Fergeau cfergeau at redhat.com
Mon Jan 18 02:39:59 PST 2016


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.

> +    } 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?

Christophe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20160118/324ecc74/attachment-0001.sig>


More information about the Spice-devel mailing list