62 lines
2.0 KiB
Diff
62 lines
2.0 KiB
Diff
From 79f3037391d4f00216af441f658d50f3753cc021 Mon Sep 17 00:00:00 2001
|
|
From: Carlos Garnacho <carlosg@gnome.org>
|
|
Date: Fri, 23 Jun 2017 18:48:06 +0200
|
|
Subject: [PATCH] libtracker-data: Protect sqlite3_bind*() with interface lock
|
|
|
|
There may be multiple cursors/db_statements from the same db interface
|
|
being accessed from multiple threads. This must be under the
|
|
TrackerDBInterface lock in order to prevent threading issues.
|
|
|
|
https://bugzilla.redhat.com/show_bug.cgi?id=1404285
|
|
---
|
|
src/libtracker-data/tracker-db-interface-sqlite.c | 8 ++++++++
|
|
1 file changed, 8 insertions(+)
|
|
|
|
diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c b/src/libtracker-data/tracker-db-interface-sqlite.c
|
|
index 66e648743c1f..4b0994da008c 100644
|
|
--- a/src/libtracker-data/tracker-db-interface-sqlite.c
|
|
+++ b/src/libtracker-data/tracker-db-interface-sqlite.c
|
|
@@ -2589,7 +2589,9 @@ tracker_db_statement_bind_double (TrackerDBStatement *stmt,
|
|
|
|
g_assert (!stmt->stmt_is_used);
|
|
|
|
+ tracker_db_interface_lock (stmt->db_interface);
|
|
sqlite3_bind_double (stmt->stmt, index + 1, value);
|
|
+ tracker_db_interface_unlock (stmt->db_interface);
|
|
}
|
|
|
|
void
|
|
@@ -2601,7 +2603,9 @@ tracker_db_statement_bind_int (TrackerDBStatement *stmt,
|
|
|
|
g_assert (!stmt->stmt_is_used);
|
|
|
|
+ tracker_db_interface_lock (stmt->db_interface);
|
|
sqlite3_bind_int64 (stmt->stmt, index + 1, value);
|
|
+ tracker_db_interface_unlock (stmt->db_interface);
|
|
}
|
|
|
|
void
|
|
@@ -2612,7 +2616,9 @@ tracker_db_statement_bind_null (TrackerDBStatement *stmt,
|
|
|
|
g_assert (!stmt->stmt_is_used);
|
|
|
|
+ tracker_db_interface_lock (stmt->db_interface);
|
|
sqlite3_bind_null (stmt->stmt, index + 1);
|
|
+ tracker_db_interface_unlock (stmt->db_interface);
|
|
}
|
|
|
|
void
|
|
@@ -2624,7 +2630,9 @@ tracker_db_statement_bind_text (TrackerDBStatement *stmt,
|
|
|
|
g_assert (!stmt->stmt_is_used);
|
|
|
|
+ tracker_db_interface_lock (stmt->db_interface);
|
|
sqlite3_bind_text (stmt->stmt, index + 1, value, -1, SQLITE_TRANSIENT);
|
|
+ tracker_db_interface_unlock (stmt->db_interface);
|
|
}
|
|
|
|
void
|
|
--
|
|
2.9.4
|
|
|