[tracker/external-crawler: 43/45] libtracker-miner: Fixed several memory leaks
- From: Martyn James Russell <mr src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/external-crawler: 43/45] libtracker-miner: Fixed several memory leaks
- Date: Tue, 12 Aug 2014 18:56:42 +0000 (UTC)
commit 94dd78828042d5652b49e8a63f01ba938c805179
Author: Martyn Russell <martyn lanedo com>
Date: Tue Aug 12 19:29:35 2014 +0100
libtracker-miner: Fixed several memory leaks
In crawler, file-data-provider and file-notifier
src/libtracker-miner/tracker-crawler.c | 33 ++++++++++++++++----
src/libtracker-miner/tracker-file-data-provider.c | 1 +
src/libtracker-miner/tracker-file-notifier.c | 4 ++
3 files changed, 31 insertions(+), 7 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-crawler.c b/src/libtracker-miner/tracker-crawler.c
index 029f8f7..f74c848 100644
--- a/src/libtracker-miner/tracker-crawler.c
+++ b/src/libtracker-miner/tracker-crawler.c
@@ -303,6 +303,10 @@ crawler_finalize (GObject *object)
g_free (priv->file_attributes);
+ if (priv->data_provider) {
+ g_object_unref (priv->data_provider);
+ }
+
G_OBJECT_CLASS (tracker_crawler_parent_class)->finalize (object);
}
@@ -324,14 +328,29 @@ check_contents_defaults (TrackerCrawler *crawler,
TrackerCrawler *
tracker_crawler_new (TrackerDataProvider *data_provider)
{
- if (!data_provider) {
+ TrackerCrawler *crawler;
+ TrackerDataProvider *default_data_provider = NULL;
+
+ if (G_LIKELY (!data_provider)) {
/* Default to the file data_provider if none is passed */
- data_provider = tracker_file_data_provider_new ();
+ data_provider = default_data_provider = tracker_file_data_provider_new ();
+ }
+
+ crawler = g_object_new (TRACKER_TYPE_CRAWLER,
+ "data-provider", data_provider,
+ NULL);
+
+ /* When a data provider is passed to us, we add a reference in
+ * the set_properties() function for this class, however, if
+ * we create the data provider, we also have the original
+ * reference for the created object which needs to be cleared
+ * up here.
+ */
+ if (default_data_provider) {
+ g_object_unref (default_data_provider);
}
- return g_object_new (TRACKER_TYPE_CRAWLER,
- "data-provider", data_provider,
- NULL);
+ return crawler;
}
static gboolean
@@ -822,8 +841,8 @@ enumerate_next_cb (GObject *object,
process_func_start (dpd->crawler);
data_provider_data_free (dpd);
} else {
- /* More work to do */
- dpd->files = g_slist_prepend (dpd->files, g_object_ref (info));
+ /* More work to do, we keep reference given to us */
+ dpd->files = g_slist_prepend (dpd->files, info);
tracker_enumerator_next_async (TRACKER_ENUMERATOR (object),
G_PRIORITY_LOW,
diff --git a/src/libtracker-miner/tracker-file-data-provider.c
b/src/libtracker-miner/tracker-file-data-provider.c
index 4bd6bb0..6e22396 100644
--- a/src/libtracker-miner/tracker-file-data-provider.c
+++ b/src/libtracker-miner/tracker-file-data-provider.c
@@ -160,6 +160,7 @@ file_data_provider_begin (TrackerDataProvider *data_provider,
}
enumerator = tracker_file_enumerator_new (fe);
+ g_object_unref (fe);
return TRACKER_ENUMERATOR (enumerator);
}
diff --git a/src/libtracker-miner/tracker-file-notifier.c b/src/libtracker-miner/tracker-file-notifier.c
index b332385..42165c9 100644
--- a/src/libtracker-miner/tracker-file-notifier.c
+++ b/src/libtracker-miner/tracker-file-notifier.c
@@ -1328,6 +1328,10 @@ tracker_file_notifier_finalize (GObject *object)
g_object_unref (priv->indexing_tree);
}
+ if (priv->data_provider) {
+ g_object_unref (priv->data_provider);
+ }
+
g_object_unref (priv->crawler);
g_object_unref (priv->monitor);
g_object_unref (priv->file_system);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]