diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2014-01-20 20:08:20 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2014-01-20 20:08:20 +0100 |
commit | 8ed1b221eb87160a0956556283872a81c6460410 (patch) | |
tree | a4de286c7c81a233a3aa108b8ba7218e5b45a77d | |
parent | e79afe841fe17ffb995123f0d2e8de85b2369639 (diff) | |
download | tracker-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.c | 12 |
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); } |