[PATCH 2/2] base-bearer: port mm_base_bearer_disconnect to use GTask

Ben Chan benchan at chromium.org
Sat Jul 1 07:33:26 UTC 2017


---
 src/mm-base-bearer.c | 41 +++++++++++++++++------------------------
 1 file changed, 17 insertions(+), 24 deletions(-)

diff --git a/src/mm-base-bearer.c b/src/mm-base-bearer.c
index ca06596d..c3a9ad28 100644
--- a/src/mm-base-bearer.c
+++ b/src/mm-base-bearer.c
@@ -922,35 +922,34 @@ mm_base_bearer_disconnect_finish (MMBaseBearer *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
 disconnect_ready (MMBaseBearer *self,
                   GAsyncResult *res,
-                  GSimpleAsyncResult *simple)
+                  GTask *task)
 {
     GError *error = NULL;
 
     if (!MM_BASE_BEARER_GET_CLASS (self)->disconnect_finish (self, res, &error)) {
         mm_dbg ("Couldn't disconnect bearer '%s'", self->priv->path);
         bearer_update_status (self, MM_BEARER_STATUS_CONNECTED);
-        g_simple_async_result_take_error (simple, error);
+        g_task_return_error (task, error);
     }
     else {
         mm_dbg ("Disconnected bearer '%s'", self->priv->path);
         bearer_update_status (self, MM_BEARER_STATUS_DISCONNECTED);
-        g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+        g_task_return_boolean (task, TRUE);
     }
 
-    g_simple_async_result_complete (simple);
-    g_object_unref (simple);
+    g_object_unref (task);
 }
 
 static void
 status_changed_complete_disconnect (MMBaseBearer *self,
                                     GParamSpec *pspec,
-                                    GSimpleAsyncResult *simple)
+                                    GTask *task)
 {
     /* We may get other states here before DISCONNECTED, like DISCONNECTING or
      * even CONNECTED. */
@@ -965,9 +964,8 @@ status_changed_complete_disconnect (MMBaseBearer *self,
 
     /* Note: interface state is updated when the DISCONNECTED state is set */
 
-    g_simple_async_result_set_op_res_gboolean (simple, TRUE);
-    g_simple_async_result_complete (simple);
-    g_object_unref (simple);
+    g_task_return_boolean (task, TRUE);
+    g_object_unref (task);
 }
 
 void
@@ -975,33 +973,28 @@ mm_base_bearer_disconnect (MMBaseBearer *self,
                            GAsyncReadyCallback callback,
                            gpointer user_data)
 {
-    GSimpleAsyncResult *simple;
+    GTask *task;
 
     g_assert (MM_BASE_BEARER_GET_CLASS (self)->disconnect != NULL);
     g_assert (MM_BASE_BEARER_GET_CLASS (self)->disconnect_finish != NULL);
 
-    simple = g_simple_async_result_new (G_OBJECT (self),
-                                        callback,
-                                        user_data,
-                                        mm_base_bearer_disconnect);
+    task = g_task_new (self, NULL, callback, user_data);
 
     /* If already disconnected, done */
     if (self->priv->status == MM_BEARER_STATUS_DISCONNECTED) {
-        g_simple_async_result_set_op_res_gboolean (simple, TRUE);
-        g_simple_async_result_complete_in_idle (simple);
-        g_object_unref (simple);
+        g_task_return_boolean (task, TRUE);
+        g_object_unref (task);
         return;
     }
 
     /* If already disconnecting, return error, don't allow a second request. */
     if (self->priv->status == MM_BEARER_STATUS_DISCONNECTING) {
-        g_simple_async_result_set_error (
-            simple,
+        g_task_return_new_error (
+            task,
             MM_CORE_ERROR,
             MM_CORE_ERROR_IN_PROGRESS,
             "Bearer already being disconnected");
-        g_simple_async_result_complete_in_idle (simple);
-        g_object_unref (simple);
+        g_object_unref (task);
         return;
     }
 
@@ -1022,7 +1015,7 @@ mm_base_bearer_disconnect (MMBaseBearer *self,
             g_signal_connect (self,
                               "notify::" MM_BASE_BEARER_STATUS,
                               (GCallback)status_changed_complete_disconnect,
-                              simple); /* takes ownership */
+                              task); /* takes ownership */
 
         return;
     }
@@ -1032,7 +1025,7 @@ mm_base_bearer_disconnect (MMBaseBearer *self,
     MM_BASE_BEARER_GET_CLASS (self)->disconnect (
         self,
         (GAsyncReadyCallback)disconnect_ready,
-        simple); /* takes ownership */
+        task); /* takes ownership */
 }
 
 typedef struct {
-- 
2.13.2



More information about the ModemManager-devel mailing list