[tracker/tracker-0.8] Possibly fixes NB#182788: segfault during opendir()
- From: Martyn James Russell <mr src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/tracker-0.8] Possibly fixes NB#182788: segfault during opendir()
- Date: Thu, 19 Aug 2010 16:12:36 +0000 (UTC)
commit a91d25278b11dcf7e5310ed51134dc03428fdfa6
Author: Aleksander Morgado <aleksander lanedo com>
Date: Mon Aug 2 14:42:47 2010 +0200
Possibly fixes NB#182788: segfault during opendir()
* The only application-level problem that may cause this issue seems
to be a wrong GFile being used when getting the path for opendir().
Thus, adding an extra reference during the g_file_enumerate_children_async()
for the specific GFile being used.
src/libtracker-miner/tracker-crawler.c | 9 ++++++---
1 files changed, 6 insertions(+), 3 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-crawler.c b/src/libtracker-miner/tracker-crawler.c
index 4a75148..274a645 100644
--- a/src/libtracker-miner/tracker-crawler.c
+++ b/src/libtracker-miner/tracker-crawler.c
@@ -103,6 +103,7 @@ typedef struct {
TrackerCrawler *crawler;
DirectoryRootInfo *root_info;
DirectoryProcessingData *dir_info;
+ GFile *dir_file;
} EnumeratorData;
static void crawler_finalize (GObject *object);
@@ -572,6 +573,9 @@ 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));
return ed;
}
@@ -606,6 +610,7 @@ enumerator_data_process (EnumeratorData *ed)
static void
enumerator_data_free (EnumeratorData *ed)
{
+ g_object_unref (ed->dir_file);
g_object_unref (ed->crawler);
g_slice_free (EnumeratorData, ed);
}
@@ -770,12 +775,10 @@ file_enumerate_children (TrackerCrawler *crawler,
DirectoryProcessingData *dir_data)
{
EnumeratorData *ed;
- GFile *file;
- file = dir_data->node->data;
ed = enumerator_data_new (crawler, info, dir_data);
- g_file_enumerate_children_async (file,
+ g_file_enumerate_children_async (ed->dir_file,
FILE_ATTRIBUTES,
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
G_PRIORITY_LOW,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]