On Mon, Jan 18, 2016 at 10:05:48AM +0100, Fabiano Fidêncio wrote: > Instead of using GSimpleAsyncResult, use the new GTask API, which is > much more straightforward. > --- > src/win-usb-driver-install.c | 86 +++++++++++++++++++++----------------------- > 1 file changed, 41 insertions(+), 45 deletions(-) > > diff --git a/src/win-usb-driver-install.c b/src/win-usb-driver-install.c > index 54e9b14..a7c4864 100644 > --- a/src/win-usb-driver-install.c > +++ b/src/win-usb-driver-install.c > @@ -44,8 +44,7 @@ > > struct _SpiceWinUsbDriverPrivate { > USBClerkReply reply; > - GSimpleAsyncResult *result; > - GCancellable *cancellable; > + GTask *task; > HANDLE handle; > SpiceUsbDevice *device; > }; > @@ -144,16 +143,16 @@ void win_usb_driver_handle_reply_cb(GObject *gobject, > > if (err) { > g_warning("failed to read reply from usbclerk (%s)", err->message); > - g_simple_async_result_take_error(priv->result, err); > + g_task_return_error(priv->task, err); > goto failed_reply; > } > > if (bytes == 0) { > g_warning("unexpected EOF from usbclerk"); > - g_simple_async_result_set_error(priv->result, > - SPICE_WIN_USB_DRIVER_ERROR, > - SPICE_WIN_USB_DRIVER_ERROR_FAILED, > - "unexpected EOF from usbclerk"); > + g_task_return_new_error(priv->task, > + SPICE_WIN_USB_DRIVER_ERROR, > + SPICE_WIN_USB_DRIVER_ERROR_FAILED, > + "unexpected EOF from usbclerk"); > goto failed_reply; > } > > @@ -167,52 +166,53 @@ void win_usb_driver_handle_reply_cb(GObject *gobject, > if (priv->reply.hdr.magic != USB_CLERK_MAGIC) { > g_warning("usbclerk magic mismatch: mine=0x%04x server=0x%04x", > USB_CLERK_MAGIC, priv->reply.hdr.magic); > - g_simple_async_result_set_error(priv->result, > - SPICE_WIN_USB_DRIVER_ERROR, > - SPICE_WIN_USB_DRIVER_ERROR_MESSAGE, > - "usbclerk magic mismatch"); > + g_task_return_new_error(priv->task, > + SPICE_WIN_USB_DRIVER_ERROR, > + SPICE_WIN_USB_DRIVER_ERROR_MESSAGE, > + "usbclerk magic mismatch"); > goto failed_reply; > } > > if (priv->reply.hdr.version != USB_CLERK_VERSION) { > g_warning("usbclerk version mismatch: mine=0x%04x server=0x%04x", > USB_CLERK_VERSION, priv->reply.hdr.version); > - g_simple_async_result_set_error(priv->result, > - SPICE_WIN_USB_DRIVER_ERROR, > - SPICE_WIN_USB_DRIVER_ERROR_MESSAGE, > - "usbclerk version mismatch"); > + g_task_return_new_error(priv->task, > + SPICE_WIN_USB_DRIVER_ERROR, > + SPICE_WIN_USB_DRIVER_ERROR_MESSAGE, > + "usbclerk version mismatch"); > } > > if (priv->reply.hdr.type != USB_CLERK_REPLY) { > g_warning("usbclerk message with unexpected type %d", > priv->reply.hdr.type); > - g_simple_async_result_set_error(priv->result, > - SPICE_WIN_USB_DRIVER_ERROR, > - SPICE_WIN_USB_DRIVER_ERROR_MESSAGE, > - "usbclerk message with unexpected type"); > + g_task_return_new_error(priv->task, > + SPICE_WIN_USB_DRIVER_ERROR, > + SPICE_WIN_USB_DRIVER_ERROR_MESSAGE, > + "usbclerk message with unexpected type"); > goto failed_reply; > } > > if (priv->reply.hdr.size != bytes) { > g_warning("usbclerk message size mismatch: read %"G_GSSIZE_FORMAT" bytes hdr.size=%d", > bytes, priv->reply.hdr.size); > - g_simple_async_result_set_error(priv->result, > - SPICE_WIN_USB_DRIVER_ERROR, > - SPICE_WIN_USB_DRIVER_ERROR_MESSAGE, > - "usbclerk message with unexpected size"); > + g_task_return_new_error(priv->task, > + SPICE_WIN_USB_DRIVER_ERROR, > + SPICE_WIN_USB_DRIVER_ERROR_MESSAGE, > + "usbclerk message with unexpected size"); > goto failed_reply; > } > > if (priv->reply.status == 0) { > - g_simple_async_result_set_error(priv->result, > - SPICE_WIN_USB_DRIVER_ERROR, > - SPICE_WIN_USB_DRIVER_ERROR_MESSAGE, > - "usbclerk error reply"); > + g_task_return_new_error(priv->task, > + SPICE_WIN_USB_DRIVER_ERROR, > + SPICE_WIN_USB_DRIVER_ERROR_MESSAGE, > + "usbclerk error reply"); > goto failed_reply; > } > > + g_task_return_boolean (priv->task, TRUE); > + > failed_reply: > - g_simple_async_result_complete_in_idle(priv->result); > g_clear_object(&priv->result); g_clear_object(&priv->task); > } > > @@ -268,7 +268,8 @@ void spice_win_usb_driver_read_reply_async(SpiceWinUsbDriver *self) > istream = g_win32_input_stream_new(priv->handle, FALSE); > > g_input_stream_read_async(istream, &priv->reply, sizeof(priv->reply), > - G_PRIORITY_DEFAULT, priv->cancellable, > + G_PRIORITY_DEFAULT, > + g_task_get_cancellable(priv->task), > win_usb_driver_handle_reply_cb, self); > } > > @@ -299,7 +300,7 @@ void spice_win_usb_driver_op(SpiceWinUsbDriver *self, > { > guint16 vid, pid; > GError *err = NULL; > - GSimpleAsyncResult *result; > + GTask *task; > SpiceWinUsbDriverPrivate *priv; > > g_return_if_fail(SPICE_IS_WIN_USB_DRIVER(self)); > @@ -307,12 +308,11 @@ void spice_win_usb_driver_op(SpiceWinUsbDriver *self, > > priv = self->priv; > > - result = g_simple_async_result_new(G_OBJECT(self), callback, user_data, > - spice_win_usb_driver_op); > + task = g_task_new(self, cancellable, callback, user_data); > > - if (priv->result) { /* allow one install/uninstall request at a time */ > + if (priv->task) { /* allow one install/uninstall request at a time */ > g_warning("Another request exists -- try later"); > - g_simple_async_result_set_error(result, > + g_task_return_new_error(result, g_task_return_new_error(task, > SPICE_WIN_USB_DRIVER_ERROR, SPICE_WIN_USB_DRIVER_ERROR_FAILED, > "Another request exists -- try later"); > goto failed_request; > @@ -325,21 +325,21 @@ void spice_win_usb_driver_op(SpiceWinUsbDriver *self, > if (!spice_win_usb_driver_send_request(self, op_type, > vid, pid, &err)) { > g_warning("failed to send a request to usbclerk %s", err->message); > - g_simple_async_result_take_error(result, err); > + g_task_return_error(result, err); g_task_return_error(task, err); > goto failed_request; > } > > /* set up for async read */ > - priv->result = result; > + priv->task = task; > priv->device = device; > - priv->cancellable = cancellable; > + > + g_task_return_boolean(priv->task, TRUE); I don't think you want to g_task_return here, it will be done at the end of the spice_win_usb_driver_read_reply_async() call (through spice_win_usb_driver_read_reply_async). Christophe > > spice_win_usb_driver_read_reply_async(self); > > return; > > failed_request: > - g_simple_async_result_complete_in_idle(result); > g_clear_object(&result); > } > > @@ -351,16 +351,12 @@ static gboolean > spice_win_usb_driver_op_finish(SpiceWinUsbDriver *self, > GAsyncResult *res, GError **err) > { > - GSimpleAsyncResult *result = G_SIMPLE_ASYNC_RESULT(res); > + GTask *task = G_TASK(res); > > g_return_val_if_fail(SPICE_IS_WIN_USB_DRIVER(self), 0); > - g_return_val_if_fail(g_simple_async_result_is_valid(res, G_OBJECT(self), > - spice_win_usb_driver_op), > - FALSE); > - if (g_simple_async_result_propagate_error(result, err)) > - return FALSE; > + g_return_val_if_fail(g_task_is_valid(task, self), FALSE); > > - return TRUE; > + return g_task_propagate_boolean(task, err); > } > > /** > -- > 2.5.0 > > _______________________________________________ > Spice-devel mailing list > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/spice-devel
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel