[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