[tracker/f19] Fix a couple of tracker-miner-fs crashes (Red Hat #972338)
David King
amigadave at fedoraproject.org
Fri Nov 28 11:12:17 UTC 2014
commit 8ab5398979e0b89a8b580c7cbd779a723c44661e
Author: Debarshi Ray <debarshir at gnome.org>
Date: Thu Oct 2 11:43:04 2014 +0200
Fix a couple of tracker-miner-fs crashes (Red Hat #972338)
tracker-0.16-miner-fs-crashes.patch | 151 +++++++++++++++++++++++++++++++++++
tracker.spec | 9 ++-
2 files changed, 159 insertions(+), 1 deletions(-)
---
diff --git a/tracker-0.16-miner-fs-crashes.patch b/tracker-0.16-miner-fs-crashes.patch
new file mode 100644
index 0000000..730f48a
--- /dev/null
+++ b/tracker-0.16-miner-fs-crashes.patch
@@ -0,0 +1,151 @@
+From 07b6fce15d3f2f242f3c34602675aec1aa80534c Mon Sep 17 00:00:00 2001
+From: Debarshi Ray <debarshir at gnome.org>
+Date: Wed, 1 Oct 2014 19:31:01 +0200
+Subject: [PATCH 1/3] libtracker-miner: Ensure that the async function uses
+ owned data
+
+https://bugzilla.gnome.org/show_bug.cgi?id=737768
+---
+ src/libtracker-miner/tracker-crawler.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/libtracker-miner/tracker-crawler.c b/src/libtracker-miner/tracker-crawler.c
+index c034204..6cf589e 100644
+--- a/src/libtracker-miner/tracker-crawler.c
++++ b/src/libtracker-miner/tracker-crawler.c
+@@ -724,7 +724,7 @@ file_enumerate_next_cb (GObject *object,
+ return;
+ }
+
+- parent = ed->dir_info->node->data;
++ parent = ed->dir_file;
+
+ for (l = files; l; l = l->next) {
+ const gchar *child_name;
+--
+2.1.0
+
+
+From 423a90ce2f269eab9a295f304dc9ea304e3f2176 Mon Sep 17 00:00:00 2001
+From: Debarshi Ray <debarshir at gnome.org>
+Date: Wed, 1 Oct 2014 19:35:13 +0200
+Subject: [PATCH 2/3] libtracker-miner: Simplify parent directory tracking
+
+The GFileEnumerator keeps a reference to the directory that is being
+traversed, so we don't need to keep track of it ourselves.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=737768
+---
+ src/libtracker-miner/tracker-crawler.c | 11 ++++-------
+ 1 file changed, 4 insertions(+), 7 deletions(-)
+
+diff --git a/src/libtracker-miner/tracker-crawler.c b/src/libtracker-miner/tracker-crawler.c
+index 6cf589e..13600d7 100644
+--- a/src/libtracker-miner/tracker-crawler.c
++++ b/src/libtracker-miner/tracker-crawler.c
+@@ -105,7 +105,6 @@ typedef struct {
+ TrackerCrawler *crawler;
+ DirectoryRootInfo *root_info;
+ DirectoryProcessingData *dir_info;
+- GFile *dir_file;
+ GCancellable *cancellable;
+ } EnumeratorData;
+
+@@ -596,9 +595,6 @@ enumerator_data_new (TrackerCrawler *crawler,
+ ed->crawler = g_object_ref (crawler);
+ ed->root_info = root_info;
+ ed->dir_info = dir_info;
+- /* Make sure there's always a ref of the GFile while we're
+- * iterating it */
+- ed->dir_file = g_object_ref (G_FILE (dir_info->node->data));
+ ed->cancellable = g_cancellable_new ();
+
+ crawler->priv->cancellables = g_list_prepend (crawler->priv->cancellables,
+@@ -640,7 +636,6 @@ enumerator_data_free (EnumeratorData *ed)
+ g_list_remove (ed->crawler->priv->cancellables,
+ ed->cancellable);
+
+- g_object_unref (ed->dir_file);
+ g_object_unref (ed->crawler);
+ g_object_unref (ed->cancellable);
+ g_slice_free (EnumeratorData, ed);
+@@ -724,7 +719,7 @@ file_enumerate_next_cb (GObject *object,
+ return;
+ }
+
+- parent = ed->dir_file;
++ parent = g_file_enumerator_get_container (enumerator);
+
+ for (l = files; l; l = l->next) {
+ const gchar *child_name;
+@@ -814,6 +809,7 @@ file_enumerate_children (TrackerCrawler *crawler,
+ DirectoryProcessingData *dir_data)
+ {
+ EnumeratorData *ed;
++ GFile *dir_file;
+ gchar *attrs;
+
+ ed = enumerator_data_new (crawler, info, dir_data);
+@@ -826,7 +822,8 @@ file_enumerate_children (TrackerCrawler *crawler,
+ attrs = g_strdup (FILE_ATTRIBUTES);
+ }
+
+- g_file_enumerate_children_async (ed->dir_file,
++ dir_file = G_FILE (dir_data->node->data);
++ g_file_enumerate_children_async (dir_file,
+ attrs,
+ G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+ G_PRIORITY_LOW,
+--
+2.1.0
+
+
+From 5c68cb7cf8825a06103bed04f72f7da5e0662c43 Mon Sep 17 00:00:00 2001
+From: Debarshi Ray <debarshir at gnome.org>
+Date: Wed, 1 Oct 2014 19:44:42 +0200
+Subject: [PATCH 3/3] libtracker-miner: Keep the crawler alive across async
+ calls
+
+The EnumeratorData held a reference to TrackerCrawler while
+enumerating. Just before closing the enumerator we destroy the
+EnumeratorData and drop the reference. This can lead to TrackerCrawler
+getting destroyed.
+
+To prevent this, grab a new reference before dropping the older one
+and keep it till the asynchronous call is alive.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=737769
+---
+ src/libtracker-miner/tracker-crawler.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/src/libtracker-miner/tracker-crawler.c b/src/libtracker-miner/tracker-crawler.c
+index 13600d7..d446fec 100644
+--- a/src/libtracker-miner/tracker-crawler.c
++++ b/src/libtracker-miner/tracker-crawler.c
+@@ -664,6 +664,7 @@ file_enumerator_close_cb (GObject *enumerator,
+ * continue with queued files/directories.
+ */
+ process_func_start (crawler);
++ g_object_unref (crawler);
+ }
+
+ static void
+@@ -708,12 +709,12 @@ file_enumerate_next_cb (GObject *object,
+ enumerator_data_process (ed);
+ }
+
+- enumerator_data_free (ed);
+ g_file_enumerator_close_async (enumerator,
+ G_PRIORITY_DEFAULT,
+ NULL,
+ file_enumerator_close_cb,
+- crawler);
++ g_object_ref (crawler));
++ enumerator_data_free (ed);
+ g_object_unref (enumerator);
+
+ return;
+--
+2.1.0
+
diff --git a/tracker.spec b/tracker.spec
index f6f722a..21f3c42 100644
--- a/tracker.spec
+++ b/tracker.spec
@@ -15,7 +15,7 @@
Summary: Desktop-neutral search tool and indexer
Name: tracker
Version: 0.16.4
-Release: 2%{?dist}
+Release: 3%{?dist}
License: GPLv2+
Group: Applications/System
URL: http://projects.gnome.org/tracker/
@@ -40,6 +40,9 @@ Patch8: 0005-Trackerbird-added-UI-localization.patch
Patch9: 0006-Trackerbird-Add-fr-FR-and-es-ES-locales.patch
Patch10: 0007-build-update-firefox-and-thunderbird-detection.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=972338
+Patch11: tracker-0.16-miner-fs-crashes.patch
+
BuildRequires: poppler-glib-devel libxml2-devel libgsf-devel libgxps-devel
BuildRequires: libuuid-devel
BuildRequires: nautilus-devel
@@ -153,6 +156,7 @@ This package contains the documentation for tracker
%patch8 -p1
%patch9 -p1
%patch10 -p1
+%patch11 -p1 -b .miner-fs-crashes
## nuke unwanted rpaths, see also
## https://fedoraproject.org/wiki/Packaging/Guidelines#Beware_of_Rpath
@@ -282,6 +286,9 @@ fi
%{_datadir}/gtk-doc/html/ontology/
%changelog
+* Thu Oct 02 2014 Debarshi Ray <rishi at fedoraproject.org> - 0.16.4-3
+- Fix a couple of tracker-miner-fs crashes (Red Hat #972338)
+
* Wed Sep 24 2014 David King <amigadave at amigadave.com> - 0.16.4-2
- Enable FLAC and Vorbis extractors
- Build against newer versions of Thunderbird and Firefox
More information about the scm-commits
mailing list