[PATCH 3/4] libmbim-glib,device: port mbim_device_close to use GTask
Ben Chan
benchan at chromium.org
Tue May 2 13:27:12 UTC 2017
---
src/libmbim-glib/mbim-device.c | 53 ++++++++++++++++++------------------------
1 file changed, 22 insertions(+), 31 deletions(-)
diff --git a/src/libmbim-glib/mbim-device.c b/src/libmbim-glib/mbim-device.c
index 2b79672..3bef419 100644
--- a/src/libmbim-glib/mbim-device.c
+++ b/src/libmbim-glib/mbim-device.c
@@ -1605,20 +1605,12 @@ mbim_device_close_force (MbimDevice *self,
}
typedef struct {
- MbimDevice *self;
- GSimpleAsyncResult *result;
- GCancellable *cancellable;
guint timeout;
} DeviceCloseContext;
static void
-device_close_context_complete_and_free (DeviceCloseContext *ctx)
+device_close_context_free (DeviceCloseContext *ctx)
{
- g_simple_async_result_complete_in_idle (ctx->result);
- g_object_unref (ctx->result);
- if (ctx->cancellable)
- g_object_unref (ctx->cancellable);
- g_object_unref (ctx->self);
g_slice_free (DeviceCloseContext, ctx);
}
@@ -1637,30 +1629,31 @@ mbim_device_close_finish (MbimDevice *self,
GAsyncResult *res,
GError **error)
{
- return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error);
+ return g_task_propagate_boolean (G_TASK (res), error);
}
static void
-close_message_ready (MbimDevice *self,
- GAsyncResult *res,
- DeviceCloseContext *ctx)
+close_message_ready (MbimDevice *self,
+ GAsyncResult *res,
+ GTask *task)
{
MbimMessage *response;
GError *error = NULL;
response = mbim_device_command_finish (self, res, &error);
if (!response)
- g_simple_async_result_take_error (ctx->result, error);
+ g_task_return_error (task, error);
else if (!mbim_message_response_get_result (response, MBIM_MESSAGE_TYPE_CLOSE_DONE, &error))
- g_simple_async_result_take_error (ctx->result, error);
+ g_task_return_error (task, error);
else if (!destroy_iochannel (self, &error))
- g_simple_async_result_take_error (ctx->result, error);
+ g_task_return_error (task, error);
else
- g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE);
+ g_task_return_boolean (task, TRUE);
if (response)
mbim_message_unref (response);
- device_close_context_complete_and_free (ctx);
+
+ g_object_unref (task);
}
/**
@@ -1685,22 +1678,20 @@ mbim_device_close (MbimDevice *self,
{
MbimMessage *request;
DeviceCloseContext *ctx;
+ GTask *task;
g_return_if_fail (MBIM_IS_DEVICE (self));
ctx = g_slice_new (DeviceCloseContext);
- ctx->self = g_object_ref (self);
- ctx->result = g_simple_async_result_new (G_OBJECT (self),
- callback,
- user_data,
- mbim_device_close);
ctx->timeout = timeout;
- ctx->cancellable = (cancellable ? g_object_ref (cancellable) : NULL);
+
+ task = g_task_new (self, cancellable, callback, user_data);
+ g_task_set_task_data (task, ctx, (GDestroyNotify)device_close_context_free);
/* Already closed? */
if (!self->priv->iochannel) {
- g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE);
- device_close_context_complete_and_free (ctx);
+ g_task_return_boolean (task, TRUE);
+ g_object_unref (task);
return;
}
@@ -1709,10 +1700,10 @@ mbim_device_close (MbimDevice *self,
GError *error = NULL;
if (!destroy_iochannel (self, &error))
- g_simple_async_result_take_error (ctx->result, error);
+ g_task_return_error (task, error);
else
- g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE);
- device_close_context_complete_and_free (ctx);
+ g_task_return_boolean (task, TRUE);
+ g_object_unref (task);
return;
}
@@ -1721,9 +1712,9 @@ mbim_device_close (MbimDevice *self,
mbim_device_command (self,
request,
10,
- ctx->cancellable,
+ cancellable,
(GAsyncReadyCallback) close_message_ready,
- ctx);
+ task);
mbim_message_unref (request);
}
--
2.13.0.rc0.306.g87b477812d-goog
More information about the libmbim-devel
mailing list