diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2014-11-30 12:34:31 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2014-12-07 23:12:02 +0100 |
commit | a105aacd5531d0d5e7d2af7c12c156c3375135af (patch) | |
tree | c7058d806363ceb085596b9ef23772da67927ce0 | |
parent | 38909b60b93e2ba208ef43c00e93a63f32f7f631 (diff) | |
download | tracker-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.c | 4 | ||||
-rw-r--r-- | src/libtracker-fts/tracker-fts.c | 20 | ||||
-rw-r--r-- | src/libtracker-fts/tracker-fts.h | 1 |
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, |