[tracker] libtracker-data: Add explicit shutdown call to TrackerDataManager
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker] libtracker-data: Add explicit shutdown call to TrackerDataManager
- Date: Sun, 9 Jul 2017 22:12:28 +0000 (UTC)
commit 2ee2ebc7e18925af53d251218f469d57a65cce14
Author: Carlos Garnacho <carlosg gnome org>
Date: Thu Jul 6 16:53:36 2017 +0200
libtracker-data: Add explicit shutdown call to TrackerDataManager
As DB interfaces will have a reference each on the TrackerDataManager,
callers will never drop the last reference themselves. Add an
explicit shutdown() call that just runs the dispose phase, and
destroy the TrackerDBManager on it.
Destroying the DB manager will tear down the writeable DB interface
and unlink the "is running" file. Any remaining readonly DB interfaces
presumably don't need the DB manager anymore and will disappear as
soon as all their remaining cursors are closed.
src/libtracker-data/libtracker-data.vapi | 1 +
src/libtracker-data/tracker-data-manager.c | 18 +++++++++++++++++-
src/libtracker-data/tracker-data-manager.h | 2 ++
src/libtracker-direct/tracker-direct.vala | 5 +++++
src/tracker-store/tracker-main.vala | 1 +
5 files changed, 26 insertions(+), 1 deletions(-)
---
diff --git a/src/libtracker-data/libtracker-data.vapi b/src/libtracker-data/libtracker-data.vapi
index d7e88a9..f79adb7 100644
--- a/src/libtracker-data/libtracker-data.vapi
+++ b/src/libtracker-data/libtracker-data.vapi
@@ -238,6 +238,7 @@ namespace Tracker {
public unowned Ontologies get_ontologies ();
public unowned DBInterface get_db_interface ();
public unowned Data.Update get_data ();
+ public void shutdown ();
}
[CCode (cheader_filename = "libtracker-data/tracker-db-interface-sqlite.h")]
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index a76c8f2..bc077fc 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -4531,6 +4531,16 @@ skip_ontology_check:
}
void
+tracker_data_manager_dispose (GObject *object)
+{
+ TrackerDataManager *manager = TRACKER_DATA_MANAGER (object);
+
+ g_clear_pointer (&manager->db_manager, tracker_db_manager_free);
+
+ G_OBJECT_CLASS (tracker_data_manager_parent_class)->finalize (object);
+}
+
+void
tracker_data_manager_finalize (GObject *object)
{
TrackerDataManager *manager = TRACKER_DATA_MANAGER (object);
@@ -4557,7 +4567,6 @@ tracker_data_manager_finalize (GObject *object)
}
#endif /* DISABLE_JOURNAL */
- g_clear_pointer (&manager->db_manager, tracker_db_manager_free);
g_clear_object (&manager->ontologies);
g_clear_object (&manager->data_update);
@@ -4594,6 +4603,7 @@ tracker_data_manager_class_init (TrackerDataManagerClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->get_property = tracker_data_manager_get_property;
+ object_class->dispose = tracker_data_manager_dispose;
object_class->finalize = tracker_data_manager_finalize;
g_object_class_install_property (object_class,
@@ -4642,3 +4652,9 @@ tracker_data_manager_get_data (TrackerDataManager *manager)
{
return manager->data_update;
}
+
+void
+tracker_data_manager_shutdown (TrackerDataManager *manager)
+{
+ g_object_run_dispose (G_OBJECT (manager));
+}
diff --git a/src/libtracker-data/tracker-data-manager.h b/src/libtracker-data/tracker-data-manager.h
index c09e677..996389e 100644
--- a/src/libtracker-data/tracker-data-manager.h
+++ b/src/libtracker-data/tracker-data-manager.h
@@ -69,6 +69,8 @@ TrackerDataManager * tracker_data_manager_new (TrackerDBManagerFlags fl
guint select_cache_size,
guint update_cache_size);
+void tracker_data_manager_shutdown (TrackerDataManager *manager);
+
GFile * tracker_data_manager_get_cache_location (TrackerDataManager *manager);
GFile * tracker_data_manager_get_data_location (TrackerDataManager *manager);
TrackerDBJournal * tracker_data_manager_get_journal_writer (TrackerDataManager *manager);
diff --git a/src/libtracker-direct/tracker-direct.vala b/src/libtracker-direct/tracker-direct.vala
index b12ccc4..14447e1 100644
--- a/src/libtracker-direct/tracker-direct.vala
+++ b/src/libtracker-direct/tracker-direct.vala
@@ -210,6 +210,11 @@ public class Tracker.Direct.Connection : Tracker.Sparql.Connection, AsyncInitabl
update_queue = new AsyncQueue<Task> ();
}
+ public override void dispose () {
+ data_manager.shutdown ();
+ base.dispose ();
+ }
+
Sparql.Cursor query_unlocked (string sparql) throws Sparql.Error, DBusError {
try {
var query_object = new Sparql.Query (data_manager, sparql);
diff --git a/src/tracker-store/tracker-main.vala b/src/tracker-store/tracker-main.vala
index 569deed..8e6d889 100644
--- a/src/tracker-store/tracker-main.vala
+++ b/src/tracker-store/tracker-main.vala
@@ -355,6 +355,7 @@ License which can be viewed at:
Tracker.Writeback.shutdown ();
Tracker.Events.shutdown ();
+ data_manager.shutdown ();
data_manager = null;
Tracker.DBus.shutdown ();
Tracker.Log.shutdown ();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]