summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2014-11-30 12:34:31 +0100
committerCarlos Garnacho <carlosg@gnome.org>2014-12-07 23:12:02 +0100
commita105aacd5531d0d5e7d2af7c12c156c3375135af (patch)
treec7058d806363ceb085596b9ef23772da67927ce0
parent38909b60b93e2ba208ef43c00e93a63f32f7f631 (diff)
downloadtracker-a105aacd5531d0d5e7d2af7c12c156c3375135af.tar.gz
tracker-fts: Make the property list per-thread data
This is global memory, and shared across threads, which doesn't play well when (un)initializing it, as multiple simultaneous accesses can occur.
-rw-r--r--src/libtracker-data/tracker-db-interface-sqlite.c4
-rw-r--r--src/libtracker-fts/tracker-fts.c20
-rw-r--r--src/libtracker-fts/tracker-fts.h1
3 files changed, 6 insertions, 19 deletions
diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c b/src/libtracker-data/tracker-db-interface-sqlite.c
index 3490c42ac..85dba3aa1 100644
--- a/src/libtracker-data/tracker-db-interface-sqlite.c
+++ b/src/libtracker-data/tracker-db-interface-sqlite.c
@@ -1333,10 +1333,6 @@ tracker_db_interface_sqlite_finalize (GObject *object)
db_interface = TRACKER_DB_INTERFACE (object);
-#if HAVE_TRACKER_FTS
- tracker_fts_shutdown_db (db_interface->db);
-#endif
-
close_database (db_interface);
g_free (db_interface->fts_insert_str);
diff --git a/src/libtracker-fts/tracker-fts.c b/src/libtracker-fts/tracker-fts.c
index e8fb4c180..dc47bae0d 100644
--- a/src/libtracker-fts/tracker-fts.c
+++ b/src/libtracker-fts/tracker-fts.c
@@ -33,8 +33,8 @@ static gsize module_initialized = 0;
#endif
-static gchar **property_names = NULL;
static gboolean initialized = FALSE;
+static GPrivate property_names_key = G_PRIVATE_INIT ((GDestroyNotify) g_strfreev);
gboolean
@@ -209,6 +209,9 @@ function_property_names (sqlite3_context *context,
int argc,
sqlite3_value *argv[])
{
+ gchar **property_names;
+
+ property_names = g_private_get (&property_names_key);
sqlite3_result_blob (context, property_names, sizeof (property_names), NULL);
}
@@ -236,6 +239,7 @@ tracker_fts_init_db (sqlite3 *db,
GHashTableIter iter;
GList *columns;
GList *table_columns;
+ gchar **property_names;
g_return_val_if_fail (initialized == TRUE, FALSE);
@@ -251,6 +255,7 @@ tracker_fts_init_db (sqlite3 *db,
}
property_names = tracker_glist_to_string_list (columns);
+ g_private_replace (&property_names_key, property_names);
g_list_free (columns);
/* Register functions with the database, including one to get property names */
@@ -260,19 +265,6 @@ tracker_fts_init_db (sqlite3 *db,
}
gboolean
-tracker_fts_shutdown_db (sqlite3 *db)
-{
- g_return_val_if_fail (initialized == TRUE, FALSE);
-
- if (property_names != NULL) {
- g_strfreev (property_names);
- property_names = NULL;
- }
-
- return TRUE;
-}
-
-gboolean
tracker_fts_create_table (sqlite3 *db,
gchar *table_name,
GHashTable *tables,
diff --git a/src/libtracker-fts/tracker-fts.h b/src/libtracker-fts/tracker-fts.h
index df76a37db..fb4e8044d 100644
--- a/src/libtracker-fts/tracker-fts.h
+++ b/src/libtracker-fts/tracker-fts.h
@@ -32,7 +32,6 @@ gboolean tracker_fts_init (void);
gboolean tracker_fts_shutdown (void);
gboolean tracker_fts_init_db (sqlite3 *db,
GHashTable *tables);
-gboolean tracker_fts_shutdown_db (sqlite3 *db);
gboolean tracker_fts_create_table (sqlite3 *db,
gchar *table_name,
GHashTable *tables,