[Spice-devel] [PATCH 01/14] channel-base: Use GTask instead of GSimpleAsyncResult

Christophe Fergeau cfergeau at redhat.com
Mon Jan 18 02:26:28 PST 2016


On Mon, Jan 18, 2016 at 10:05:37AM +0100, Fabiano FidĂȘncio 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, which is safe based on major distro support:
> - Debian Jessie: glib-2.42
> - RHEL-7.1: glib-2.40
> - SLES12: glib-2.38
> - Ubuntu LTS 14.04: glib-2.40
> ---
>  configure.ac       |  6 +++---
>  src/channel-base.c | 26 ++++++++++----------------
>  2 files changed, 13 insertions(+), 19 deletions(-)
> 
> diff --git a/configure.ac b/configure.ac
> index 38db8b5..e113487 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -201,7 +201,7 @@ fi
>  
>  AC_CHECK_FUNCS(clearenv strtok_r)
>  
> -PKG_CHECK_MODULES(GLIB2, glib-2.0 >= 2.28)
> +PKG_CHECK_MODULES(GLIB2, glib-2.0)
>  AC_SUBST(GLIB2_CFLAGS)
>  AC_SUBST(GLIB2_LIBS)
>  
> @@ -209,7 +209,7 @@ PKG_CHECK_MODULES(GOBJECT2, gobject-2.0)
>  AC_SUBST(GOBJECT2_CFLAGS)
>  AC_SUBST(GOBJECT2_LIBS)
>  
> -PKG_CHECK_MODULES(GIO, gio-2.0 >= 2.10.0 $gio_os)
> +PKG_CHECK_MODULES(GIO, gio-2.0 >= 2.36 $gio_os)
>  AC_SUBST(GIO_CFLAGS)
>  AC_SUBST(GIO_LIBS)
>  
> @@ -217,7 +217,7 @@ PKG_CHECK_MODULES(CAIRO, cairo >= 1.2.0)
>  AC_SUBST(CAIRO_CFLAGS)
>  AC_SUBST(CAIRO_LIBS)
>  
> -PKG_CHECK_MODULES(GTHREAD, gthread-2.0 > 2.0.0)
> +PKG_CHECK_MODULES(GTHREAD, gthread-2.0)
>  AC_SUBST(GTHREAD_CFLAGS)
>  AC_SUBST(GTHREAD_LIBS)
>  
> diff --git a/src/channel-base.c b/src/channel-base.c
> index 13e4ced..517e7b2 100644
> --- a/src/channel-base.c
> +++ b/src/channel-base.c
> @@ -240,10 +240,9 @@ void spice_channel_set_handlers(SpiceChannelClass *klass,
>  static void
>  vmc_write_free_cb(uint8_t *data, void *user_data)
>  {
> -    GSimpleAsyncResult *result = user_data;
> +    GTask *task = user_data;
>  
> -    g_simple_async_result_complete_in_idle(result);

The callback for the async call was called after vmc_write_free_cb()
runs (ie after the message has been sent in spice_channel_write_msg)...

> -    g_object_unref(result);
> +    g_object_unref(task);
>  }
>  
>  G_GNUC_INTERNAL
> @@ -254,15 +253,14 @@ void spice_vmc_write_async(SpiceChannel *self,
>                             gpointer user_data)
>  {
>      SpiceMsgOut *msg;
> -    GSimpleAsyncResult *simple;
> +    GTask *task;
>  
> -    simple = g_simple_async_result_new(G_OBJECT(self), callback, user_data,
> -                                       spice_port_write_async);
> -    g_simple_async_result_set_op_res_gssize(simple, count);
> +    task = g_task_new(self, cancellable, callback, user_data);
> +    g_task_return_int(task, count);

... but with this call here, I suspect the ordering of the async
callback being called, and spice_channel_write_msg() being called become
unspecified.
Have you checked that it's actually a non-issue? If yes, this would
deserve detailed explanations in the commit log.

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/e82cb06c/attachment.sig>


More information about the Spice-devel mailing list