summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2016-11-05 21:21:23 +0100
committerCarlos Garnacho <carlosg@gnome.org>2016-11-20 16:18:59 +0100
commit4c1efdaf2c662c26d3125a4dcd4621f515ac5a49 (patch)
tree3e9ad5c4c3da31c3ae1cb654c80f42ed8c543538
parentf185c630e7a0dd9208f23df248b331e899315224 (diff)
downloadtracker-4c1efdaf2c662c26d3125a4dcd4621f515ac5a49.tar.gz
libtracker-data: Protect stmt creation with the TrackerDBInterface mutex
Creating the sqlite3_stmt counts as "accessing the database handle", so make it sure they're also protected by the TrackerDBInterface mutex.
-rw-r--r--src/libtracker-data/tracker-db-interface-sqlite.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c b/src/libtracker-data/tracker-db-interface-sqlite.c
index 2ceea272c..e6eef8522 100644
--- a/src/libtracker-data/tracker-db-interface-sqlite.c
+++ b/src/libtracker-data/tracker-db-interface-sqlite.c
@@ -2170,6 +2170,8 @@ tracker_db_interface_create_statement (TrackerDBInterface *db_interfac
full_query = g_strdup_vprintf (query, args);
va_end (args);
+ tracker_db_interface_lock (db_interface);
+
if (cache_type != TRACKER_DB_STATEMENT_CACHE_TYPE_NONE) {
stmt = tracker_db_interface_lru_lookup (db_interface, &cache_type,
full_query);
@@ -2199,6 +2201,8 @@ tracker_db_interface_create_statement (TrackerDBInterface *db_interfac
g_free (full_query);
+ tracker_db_interface_unlock (db_interface);
+
return g_object_ref_sink (stmt);
}
@@ -2300,16 +2304,19 @@ tracker_db_interface_execute_vquery (TrackerDBInterface *db_interface,
sqlite3_stmt *stmt;
int retval;
+ tracker_db_interface_lock (db_interface);
+
full_query = g_strdup_vprintf (query, args);
stmt = tracker_db_interface_prepare_stmt (db_interface,
full_query,
error);
g_free (full_query);
- if (!stmt)
- return;
+ if (stmt) {
+ execute_stmt (db_interface, stmt, NULL, error);
+ sqlite3_finalize (stmt);
+ }
- execute_stmt (db_interface, stmt, NULL, error);
- sqlite3_finalize (stmt);
+ tracker_db_interface_unlock (db_interface);
}
TrackerDBInterface *