[gnome-builder] threading: be defensive and clear structures



commit 948751d8313338eea9f6b906906227966d6c5a3c
Author: Christian Hergert <chergert redhat com>
Date:   Wed Jan 17 19:29:57 2018 -0800

    threading: be defensive and clear structures

 src/libide/threading/ide-thread-pool.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)
---
diff --git a/src/libide/threading/ide-thread-pool.c b/src/libide/threading/ide-thread-pool.c
index 17bc8c63d..e98503712 100644
--- a/src/libide/threading/ide-thread-pool.c
+++ b/src/libide/threading/ide-thread-pool.c
@@ -157,9 +157,6 @@ ide_thread_pool_worker (gpointer data,
                         gpointer user_data)
 {
   WorkItem *work_item = data;
-  gpointer source_object;
-  gpointer task_data;
-  GCancellable *cancellable;
 
   g_assert (work_item != NULL);
 
@@ -167,17 +164,18 @@ ide_thread_pool_worker (gpointer data,
 
   if (work_item->type == TYPE_TASK)
     {
-      source_object = g_task_get_source_object (work_item->task.task);
-      task_data = g_task_get_task_data (work_item->task.task);
-      cancellable = g_task_get_cancellable (work_item->task.task);
+      gpointer source_object = g_task_get_source_object (work_item->task.task);
+      gpointer task_data = g_task_get_task_data (work_item->task.task);
+      GCancellable *cancellable = g_task_get_cancellable (work_item->task.task);
 
       work_item->task.func (work_item->task.task, source_object, task_data, cancellable);
-
-      g_object_unref (work_item->task.task);
+      g_clear_object (&work_item->task.task);
+      work_item->task.func = NULL;
     }
   else if (work_item->type == TYPE_FUNC)
     {
       work_item->func.callback (work_item->func.data);
+      work_item->func.data = NULL;
     }
 
   g_slice_free (WorkItem, work_item);


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