[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