[gnome-software/wip/kalev/plugin_loader_cancellable: 1/2] plugin loader: Simplify task cancellable tracking



commit 4d2793b5740e32d7ee925ce9c0416994e70956cf
Author: Kalev Lember <klember redhat com>
Date:   Tue Dec 12 14:26:18 2017 +0100

    plugin loader: Simplify task cancellable tracking
    
    Pass the GTask around and use g_task_get_cancellable() instead of
    keeping track of it ourselves in a custom struct.

 lib/gs-plugin-loader.c |   20 +++++++++-----------
 1 files changed, 9 insertions(+), 11 deletions(-)
---
diff --git a/lib/gs-plugin-loader.c b/lib/gs-plugin-loader.c
index ece41e1..1893bc7 100644
--- a/lib/gs-plugin-loader.c
+++ b/lib/gs-plugin-loader.c
@@ -178,7 +178,6 @@ typedef void                 (*GsPluginAdoptAppFunc)        (GsPlugin       *plugin,
 /* async helper */
 typedef struct {
        GsPluginLoader                  *plugin_loader;
-       GCancellable                    *cancellable;
        GCancellable                    *cancellable_caller;
        gulong                           cancellable_id;
        const gchar                     *function_name;
@@ -225,8 +224,6 @@ gs_plugin_loader_helper_free (GsPluginLoaderHelper *helper)
                g_source_remove (helper->timeout_id);
        if (helper->plugin_job != NULL)
                g_object_unref (helper->plugin_job);
-       if (helper->cancellable != NULL)
-               g_object_unref (helper->cancellable);
        if (helper->cancellable_caller != NULL)
                g_object_unref (helper->cancellable_caller);
        if (helper->catlist != NULL)
@@ -3385,12 +3382,14 @@ gs_plugin_loader_process_thread_cb (GTask *task,
 static gboolean
 gs_plugin_loader_job_timeout_cb (gpointer user_data)
 {
-       GsPluginLoaderHelper *helper = (GsPluginLoaderHelper *) user_data;
+       GTask *task = (GTask *) user_data;
+       GCancellable *cancellable = g_task_get_cancellable (task);
+       GsPluginLoaderHelper *helper = g_task_get_task_data (task);
 
        /* call the cancellable */
        g_debug ("cancelling job as it took too long");
-       if (!g_cancellable_is_cancelled (helper->cancellable))
-               g_cancellable_cancel (helper->cancellable);
+       if (!g_cancellable_is_cancelled (cancellable))
+               g_cancellable_cancel (cancellable);
 
        /* failed */
        helper->timeout_triggered = TRUE;
@@ -3399,10 +3398,10 @@ gs_plugin_loader_job_timeout_cb (gpointer user_data)
 }
 
 static void
-gs_plugin_loader_cancelled_cb (GCancellable *cancellable, GsPluginLoaderHelper *helper)
+gs_plugin_loader_cancelled_cb (GCancellable *cancellable, GTask *task)
 {
        /* just proxy this forward */
-       g_cancellable_cancel (helper->cancellable);
+       g_cancellable_cancel (g_task_get_cancellable (task));
 }
 
 /**
@@ -3584,13 +3583,12 @@ gs_plugin_loader_job_process_async (GsPluginLoader *plugin_loader,
        }
 
        /* jobs always have a valid cancellable, so proxy the caller */
-       helper->cancellable = g_object_ref (cancellable_job);
        if (cancellable != NULL) {
                helper->cancellable_caller = g_object_ref (cancellable);
                helper->cancellable_id =
                        g_cancellable_connect (helper->cancellable_caller,
                                               G_CALLBACK (gs_plugin_loader_cancelled_cb),
-                                              helper, NULL);
+                                              task, NULL);
        }
 
        /* set up a hang handler */
@@ -3607,7 +3605,7 @@ gs_plugin_loader_job_process_async (GsPluginLoader *plugin_loader,
                helper->timeout_id =
                        g_timeout_add_seconds (gs_plugin_job_get_timeout (plugin_job),
                                               gs_plugin_loader_job_timeout_cb,
-                                              helper);
+                                              task);
                break;
        default:
                break;


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