summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2014-01-20 20:08:20 +0100
committerCarlos Garnacho <carlosg@gnome.org>2014-01-20 20:08:20 +0100
commit8ed1b221eb87160a0956556283872a81c6460410 (patch)
treea4de286c7c81a233a3aa108b8ba7218e5b45a77d
parente79afe841fe17ffb995123f0d2e8de85b2369639 (diff)
downloadtracker-8ed1b221eb87160a0956556283872a81c6460410.tar.gz
extract: Ensure a task is added to priv->running_tasks just once
If a tasks was iterated over multiple extraction modules, the task ended up inserted on priv->running_tasks more than once, but only removed once when the task finished, leaving dangling pointers in priv->running_tasks.
-rw-r--r--src/tracker-extract/tracker-extract.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/tracker-extract/tracker-extract.c b/src/tracker-extract/tracker-extract.c
index 2f06924f2..25d5f9b42 100644
--- a/src/tracker-extract/tracker-extract.c
+++ b/src/tracker-extract/tracker-extract.c
@@ -663,10 +663,6 @@ dispatch_task_cb (TrackerExtractTask *task)
return FALSE;
}
- g_mutex_lock (&priv->task_mutex);
- priv->running_tasks = g_list_prepend (priv->running_tasks, task);
- g_mutex_unlock (&priv->task_mutex);
-
switch (thread_awareness) {
case TRACKER_MODULE_NONE:
/* Error out */
@@ -769,6 +765,14 @@ tracker_extract_file (TrackerExtract *extract,
g_simple_async_result_complete_in_idle (res);
g_error_free (error);
} else {
+ TrackerExtractPrivate *priv;
+
+ priv = TRACKER_EXTRACT_GET_PRIVATE (task->extract);
+
+ g_mutex_lock (&priv->task_mutex);
+ priv->running_tasks = g_list_prepend (priv->running_tasks, task);
+ g_mutex_unlock (&priv->task_mutex);
+
g_idle_add ((GSourceFunc) dispatch_task_cb, task);
}