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); - 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); msg = spice_msg_out_new(SPICE_CHANNEL(self), SPICE_MSGC_SPICEVMC_DATA); spice_marshaller_add_ref_full(msg->marshaller, (uint8_t*)buffer, count, - vmc_write_free_cb, simple); + vmc_write_free_cb, task); spice_msg_out_send(msg); } @@ -270,17 +268,13 @@ G_GNUC_INTERNAL gssize spice_vmc_write_finish(SpiceChannel *self, GAsyncResult *result, GError **error) { - GSimpleAsyncResult *simple; + GTask *task; g_return_val_if_fail(result != NULL, -1); - simple = (GSimpleAsyncResult *)result; + task = G_TASK(result); - if (g_simple_async_result_propagate_error(simple, error)) - return -1; + g_return_val_if_fail(g_task_is_valid(task, self), -1); - g_return_val_if_fail(g_simple_async_result_is_valid(result, G_OBJECT(self), - spice_port_write_async), -1); - - return g_simple_async_result_get_op_res_gssize(simple); + return g_task_propagate_int(task, error); } -- 2.5.0 _______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel