[tracker/sam/fix-load: 2/2] libtracker-data: Fix crash when statement cache isn't initialized



commit ae46aaa12694eef39e09f19eac3e46068b6f7bcc
Author: Sam Thursfield <sam afuera me uk>
Date:   Sun Mar 8 16:21:46 2020 +0100

    libtracker-data: Fix crash when statement cache isn't initialized
    
    This was causing LOAD updates to fail.

 src/libtracker-data/tracker-db-interface-sqlite.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)
---
diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c 
b/src/libtracker-data/tracker-db-interface-sqlite.c
index 3dbfcc233..f085e7f8e 100644
--- a/src/libtracker-data/tracker-db-interface-sqlite.c
+++ b/src/libtracker-data/tracker-db-interface-sqlite.c
@@ -2618,7 +2618,10 @@ tracker_db_interface_lru_insert_unchecked (TrackerDBInterface          *db_inter
         *    `- [n-p] <- [n-p] <--------'    *
         *                                    */
 
-       if (stmt_lru->size >= stmt_lru->max) {
+       if (stmt_lru->size == 0) {
+               stmt_lru->head = stmt;
+               stmt_lru->tail = stmt;
+       } else if (stmt_lru->size >= stmt_lru->max) {
                TrackerDBStatement *new_head;
 
                /* We reached max-size of the LRU stmt cache. Destroy current
@@ -2626,16 +2629,12 @@ tracker_db_interface_lru_insert_unchecked (TrackerDBInterface          *db_inter
                 * that we take out the current head, and close the ring.
                 * Then we assign head->next as new head.
                 */
+               g_printerr("stmt_lru size: %i, max: %i, head: %p\n", stmt_lru->size, stmt_lru->max, 
stmt_lru->head);
                new_head = stmt_lru->head->next;
                g_hash_table_remove (db_interface->dynamic_statements,
                                     (gpointer) sqlite3_sql (stmt_lru->head->stmt));
                stmt_lru->size--;
                stmt_lru->head = new_head;
-       } else {
-               if (stmt_lru->size == 0) {
-                       stmt_lru->head = stmt;
-                       stmt_lru->tail = stmt;
-               }
        }
 
        /* Set the current stmt (which is always new here) as the new tail


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