[gnome-settings-daemon] rfkill: Use local task variables where possible



commit 769d3503dbc1a6087dacb5aba0b337a0ae5084c2
Author: Philip Withnall <withnall endlessm com>
Date:   Thu Feb 9 14:01:42 2017 +0000

    rfkill: Use local task variables where possible
    
    In order to keep the binding between a GTask object and a control flow,
    use the GTask passed as the user_data to the callbacks as much as
    possible, rather than referring back to the global GTask which might
    have changed in the mean time.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=778383

 plugins/rfkill/rfkill-glib.c |   20 ++++++++++++--------
 1 files changed, 12 insertions(+), 8 deletions(-)
---
diff --git a/plugins/rfkill/rfkill-glib.c b/plugins/rfkill/rfkill-glib.c
index 2ae96b0..80331b9 100644
--- a/plugins/rfkill/rfkill-glib.c
+++ b/plugins/rfkill/rfkill-glib.c
@@ -82,7 +82,8 @@ write_change_all_again_done_cb (GObject      *source_object,
                                GAsyncResult *res,
                                gpointer      user_data)
 {
-       CcRfkillGlib *rfkill = user_data;
+       g_autoptr(GTask) task = G_TASK (user_data);
+       CcRfkillGlib *rfkill = g_task_get_source_object (task);
        g_autoptr(GError) error = NULL;
        gssize ret;
 
@@ -90,9 +91,9 @@ write_change_all_again_done_cb (GObject      *source_object,
 
        ret = g_output_stream_write_finish (G_OUTPUT_STREAM (source_object), res, &error);
        if (ret < 0)
-               g_task_return_error (rfkill->task, g_steal_pointer (&error));
+               g_task_return_error (task, g_steal_pointer (&error));
        else
-               g_task_return_boolean (rfkill->task, ret >= 0);
+               g_task_return_boolean (task, ret >= 0);
 
        g_clear_object (&rfkill->task);
        g_clear_pointer (&rfkill->event, g_free);
@@ -122,7 +123,8 @@ write_change_all_done_cb (GObject      *source_object,
                          GAsyncResult *res,
                          gpointer      user_data)
 {
-       CcRfkillGlib *rfkill = user_data;
+       g_autoptr(GTask) task = G_TASK (user_data);
+       CcRfkillGlib *rfkill = g_task_get_source_object (task);
        g_autoptr(GError) error = NULL;
        gssize ret;
 
@@ -130,11 +132,11 @@ write_change_all_done_cb (GObject      *source_object,
 
        ret = g_output_stream_write_finish (G_OUTPUT_STREAM (source_object), res, &error);
        if (ret < 0) {
-               g_task_return_error (rfkill->task, g_steal_pointer (&error));
+               g_task_return_error (task, g_steal_pointer (&error));
                goto bail;
        } else if (rfkill->event->soft == 1 ||
                   rfkill->event->type != RFKILL_TYPE_BLUETOOTH) {
-               g_task_return_boolean (rfkill->task, ret >= 0);
+               g_task_return_boolean (task, ret >= 0);
                goto bail;
        }
 
@@ -189,7 +191,8 @@ cc_rfkill_glib_send_change_all_event (CcRfkillGlib        *rfkill,
        g_output_stream_write_async (rfkill->stream,
                                     event, sizeof(struct rfkill_event),
                                     G_PRIORITY_DEFAULT,
-                                    cancellable, write_change_all_done_cb, rfkill);
+                                    cancellable, write_change_all_done_cb,
+                                    g_object_ref (task));
 }
 
 static const char *
@@ -276,7 +279,8 @@ emit_changed_signal_and_free (CcRfkillGlib *rfkill,
                                             rfkill->event, sizeof(struct rfkill_event),
                                             G_PRIORITY_DEFAULT,
                                             g_task_get_cancellable (rfkill->task),
-                                            write_change_all_again_done_cb, rfkill);
+                                            write_change_all_again_done_cb,
+                                            g_object_ref (rfkill->task));
 
                g_source_remove (rfkill->change_all_timeout_id);
                rfkill->change_all_timeout_id = 0;


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