diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2016-11-05 21:21:23 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2016-11-20 16:18:59 +0100 |
commit | 4c1efdaf2c662c26d3125a4dcd4621f515ac5a49 (patch) | |
tree | 3e9ad5c4c3da31c3ae1cb654c80f42ed8c543538 | |
parent | f185c630e7a0dd9208f23df248b331e899315224 (diff) | |
download | tracker-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.c | 15 |
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 * |