[tracker] libtracker-data: Protect stmt creation with the TrackerDBInterface mutex



commit 4c1efdaf2c662c26d3125a4dcd4621f515ac5a49
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sat Nov 5 21:21:23 2016 +0100

    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.

 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 2ceea27..e6eef85 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 *


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]