From 79ed45373f4f6eb53d08e0d9b42b938b93eff4a8 Mon Sep 17 00:00:00 2001 From: Fabiano FidĂȘncio Date: Thu, 14 Jan 2016 15:02:23 +0100 Subject: usb-acl-helper: Use GTask instead of GSimpleAsyncResult MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of using GSimpleAsyncResult, use the new GTask API, which is much more straightforward. Signed-off-by: Fabiano FidĂȘncio Acked-by: Jonathon Jongsma --- src/usb-acl-helper.c | 61 +++++++++++++++++++++++----------------------------- 1 file changed, 27 insertions(+), 34 deletions(-) (limited to 'src/usb-acl-helper.c') diff --git a/src/usb-acl-helper.c b/src/usb-acl-helper.c index cc5ce9f..03d6c67 100644 --- a/src/usb-acl-helper.c +++ b/src/usb-acl-helper.c @@ -35,7 +35,7 @@ (G_TYPE_INSTANCE_GET_PRIVATE ((obj), SPICE_TYPE_USB_ACL_HELPER, SpiceUsbAclHelperPrivate)) struct _SpiceUsbAclHelperPrivate { - GSimpleAsyncResult *result; + GTask *task; GIOChannel *in_ch; GIOChannel *out_ch; GCancellable *cancellable; @@ -57,7 +57,7 @@ static void spice_usb_acl_helper_cleanup(SpiceUsbAclHelper *self) priv->cancellable = NULL; priv->cancellable_id = 0; - g_clear_object(&priv->result); + g_clear_object(&priv->task); if (priv->in_ch) { g_io_channel_unref(priv->in_ch); @@ -90,9 +90,9 @@ static void spice_usb_acl_helper_class_init(SpiceUsbAclHelperClass *klass) /* ------------------------------------------------------------------ */ /* callbacks */ -static void async_result_set_cancelled(GSimpleAsyncResult *result) +static void async_result_set_cancelled(GTask *task) { - g_simple_async_result_set_error(result, + g_task_return_new_error(task, G_IO_ERROR, G_IO_ERROR_CANCELLED, "Setting USB device node ACL cancelled"); } @@ -110,7 +110,7 @@ static gboolean cb_out_watch(GIOChannel *channel, gsize size; /* Check that we've not been cancelled */ - if (priv->result == NULL) + if (priv->task == NULL) goto done; g_return_val_if_fail(channel == priv->out_ch, FALSE); @@ -121,10 +121,11 @@ static gboolean cb_out_watch(GIOChannel *channel, string[strlen(string) - 1] = 0; if (!strcmp(string, "SUCCESS")) { success = TRUE; + g_task_return_boolean(priv->task, TRUE); } else if (!strcmp(string, "CANCELED")) { - async_result_set_cancelled(priv->result); + async_result_set_cancelled(priv->task); } else { - g_simple_async_result_set_error(priv->result, + g_task_return_new_error(priv->task, SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED, "Error setting USB device node ACL: '%s'", string); @@ -132,10 +133,10 @@ static gboolean cb_out_watch(GIOChannel *channel, g_free(string); break; case G_IO_STATUS_ERROR: - g_simple_async_result_take_error(priv->result, err); + g_task_return_error(priv->task, err); break; case G_IO_STATUS_EOF: - g_simple_async_result_set_error(priv->result, + g_task_return_new_error(priv->task, SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED, "Unexpected EOF reading from acl helper stdout"); break; @@ -147,8 +148,7 @@ static gboolean cb_out_watch(GIOChannel *channel, priv->cancellable = NULL; priv->cancellable_id = 0; - g_simple_async_result_complete_in_idle(priv->result); - g_clear_object(&priv->result); + g_clear_object(&priv->task); if (!success) spice_usb_acl_helper_cleanup(self); @@ -193,7 +193,7 @@ void spice_usb_acl_helper_open_acl_async(SpiceUsbAclHelper *self, g_return_if_fail(SPICE_IS_USB_ACL_HELPER(self)); SpiceUsbAclHelperPrivate *priv = self->priv; - GSimpleAsyncResult *result; + GTask *task; GError *err = NULL; GIOStatus status; GPid helper_pid; @@ -205,25 +205,24 @@ void spice_usb_acl_helper_open_acl_async(SpiceUsbAclHelper *self, gint in, out; gchar buf[128]; - result = g_simple_async_result_new(G_OBJECT(self), callback, user_data, - spice_usb_acl_helper_open_acl_async); + task = g_task_new(self, cancellable, callback, user_data); if (priv->out_ch) { - g_simple_async_result_set_error(result, + g_task_return_new_error(task, SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED, "Error acl-helper already has an acl open"); goto done; } if (g_cancellable_set_error_if_cancelled(cancellable, &err)) { - g_simple_async_result_take_error(result, err); + g_task_return_error(task, err); goto done; } if (!g_spawn_async_with_pipes(NULL, argv, NULL, G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH, NULL, NULL, &helper_pid, &in, &out, NULL, &err)) { - g_simple_async_result_take_error(result, err); + g_task_return_error(task, err); goto done; } g_child_watch_add(helper_pid, helper_child_watch_cb, NULL); @@ -235,7 +234,7 @@ void spice_usb_acl_helper_open_acl_async(SpiceUsbAclHelper *self, g_io_channel_set_close_on_unref(priv->out_ch, TRUE); status = g_io_channel_set_flags(priv->out_ch, G_IO_FLAG_NONBLOCK, &err); if (status != G_IO_STATUS_NORMAL) { - g_simple_async_result_take_error(result, err); + g_task_return_error(task, err); goto done; } @@ -243,16 +242,16 @@ void spice_usb_acl_helper_open_acl_async(SpiceUsbAclHelper *self, status = g_io_channel_write_chars(priv->in_ch, buf, -1, &bytes_written, &err); if (status != G_IO_STATUS_NORMAL) { - g_simple_async_result_take_error(result, err); + g_task_return_error(task, err); goto done; } status = g_io_channel_flush(priv->in_ch, &err); if (status != G_IO_STATUS_NORMAL) { - g_simple_async_result_take_error(result, err); + g_task_return_error(task, err); goto done; } - priv->result = result; + priv->task = task; if (cancellable) { priv->cancellable = cancellable; priv->cancellable_id = g_cancellable_connect(cancellable, @@ -265,24 +264,19 @@ void spice_usb_acl_helper_open_acl_async(SpiceUsbAclHelper *self, done: spice_usb_acl_helper_cleanup(self); - g_simple_async_result_complete_in_idle(result); - g_object_unref(result); + g_object_unref(task); } G_GNUC_INTERNAL gboolean spice_usb_acl_helper_open_acl_finish( SpiceUsbAclHelper *self, GAsyncResult *res, GError **err) { - GSimpleAsyncResult *result = G_SIMPLE_ASYNC_RESULT(res); + GTask *task = G_TASK(res); - g_return_val_if_fail(g_simple_async_result_is_valid(res, G_OBJECT(self), - spice_usb_acl_helper_open_acl_async), + g_return_val_if_fail(g_task_is_valid(task, self), FALSE); - if (g_simple_async_result_propagate_error(result, err)) - return FALSE; - - return TRUE; + return g_task_propagate_boolean(task, err); } G_GNUC_INTERNAL @@ -291,9 +285,8 @@ void spice_usb_acl_helper_cancel(SpiceUsbAclHelper *self) g_return_if_fail(SPICE_IS_USB_ACL_HELPER(self)); SpiceUsbAclHelperPrivate *priv = self->priv; - g_return_if_fail(priv->result != NULL); + g_return_if_fail(priv->task != NULL); - async_result_set_cancelled(priv->result); - g_simple_async_result_complete_in_idle(priv->result); - g_clear_object(&priv->result); + async_result_set_cancelled(priv->task); + g_clear_object(&priv->task); } -- cgit