[PATCH v2 04/13] channel-usbredir: Use GTask instead of GSimpleAsyncResult

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Instead of using GSimpleAsyncResult, use the new GTask API, which is
much more straightforward.
---
 src/channel-usbredir.c | 36 ++++++++++++++++--------------------
 1 file changed, 16 insertions(+), 20 deletions(-)

diff --git a/src/channel-usbredir.c b/src/channel-usbredir.c
index a9942b2..2d264f9 100644
--- a/src/channel-usbredir.c
+++ b/src/channel-usbredir.c
@@ -76,7 +76,7 @@ struct _SpiceUsbredirChannelPrivate {
     int read_buf_size;
     enum SpiceUsbredirChannelState state;
 #ifdef USE_POLKIT
-    GSimpleAsyncResult *result;
+    GTask *task;
     SpiceUsbAclHelper *acl_helper;
 #endif
 };
@@ -297,12 +297,14 @@ static void spice_usbredir_channel_open_acl_cb(
         spice_usbredir_channel_open_device(channel, &err);
     }
     if (err) {
-        g_simple_async_result_take_error(priv->result, err);
+        g_task_return_error(priv->task, err);
         libusb_unref_device(priv->device);
         priv->device = NULL;
         g_boxed_free(spice_usb_device_get_type(), priv->spice_device);
         priv->spice_device = NULL;
         priv->state  = STATE_DISCONNECTED;
+    } else {
+        g_task_return_boolean(priv->task, TRUE);
     }
 
     spice_usb_acl_helper_close_acl(priv->acl_helper);
@@ -310,8 +312,7 @@ static void spice_usbredir_channel_open_acl_cb(
     g_object_set(spice_channel_get_session(SPICE_CHANNEL(channel)),
                  "inhibit-keyboard-grab", FALSE, NULL);
 
-    g_simple_async_result_complete_in_idle(priv->result);
-    g_clear_object(&priv->result);
+    g_clear_object(&priv->task);
 }
 #endif
 
@@ -338,18 +339,17 @@ void spice_usbredir_channel_connect_device_async(
                   spice_usb_device_get_pid(spice_device),
                   spice_device, channel);
 
-    result = g_simple_async_result_new(G_OBJECT(channel), callback, user_data,
-                                 spice_usbredir_channel_connect_device_async);
+    task = g_task_new(channel, cancellable, callback, user_data);
 
     if (!priv->host) {
-        g_simple_async_result_set_error(result,
+        g_task_return_new_error(task,
                             SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED,
                             "Error libusb context not set");
         goto done;
     }
 
     if (priv->state != STATE_DISCONNECTED) {
-        g_simple_async_result_set_error(result,
+        g_task_return_new_error(task,
                             SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED,
                             "Error channel is busy");
         goto done;
@@ -359,7 +359,7 @@ void spice_usbredir_channel_connect_device_async(
     priv->spice_device = g_boxed_copy(spice_usb_device_get_type(),
                                       spice_device);
 #ifdef USE_POLKIT
-    priv->result = result;
+    priv->task = task;
     priv->state  = STATE_WAITING_FOR_ACL_HELPER;
     priv->acl_helper = spice_usb_acl_helper_new();
     g_object_set(spice_channel_get_session(SPICE_CHANNEL(channel)),
@@ -373,17 +373,18 @@ void spice_usbredir_channel_connect_device_async(
     return;
 #else
     if (!spice_usbredir_channel_open_device(channel, &err)) {
-        g_simple_async_result_take_error(result, err);
+        g_task_return_error(task, err);
         libusb_unref_device(priv->device);
         priv->device = NULL;
         g_boxed_free(spice_usb_device_get_type(), priv->spice_device);
         priv->spice_device = NULL;
+    } else {
+        g_task_return_boolean(task, TRUE);
     }
 #endif
 
 done:
-    g_simple_async_result_complete_in_idle(result);
-    g_object_unref(result);
+    g_object_unref(task);
 }
 
 G_GNUC_INTERNAL
@@ -392,16 +393,11 @@ gboolean spice_usbredir_channel_connect_device_finish(
                                                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(channel),
-                                 spice_usbredir_channel_connect_device_async),
-                         FALSE);
+    g_return_val_if_fail(g_task_is_valid(task, channel), FALSE);
 
-    if (g_simple_async_result_propagate_error(result, err))
-        return FALSE;
-
-    return TRUE;
+    return g_task_propagate_boolean(task, err);
 }
 
 G_GNUC_INTERNAL
-- 
2.5.0

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]