[tracker/sql-error-checks-and-fixes] libtracker-db: Use 100 for the progress handler and also check in iter_next
- From: Philip Van Hoof <pvanhoof src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/sql-error-checks-and-fixes] libtracker-db: Use 100 for the progress handler and also check in iter_next
- Date: Tue, 25 May 2010 17:02:00 +0000 (UTC)
commit f077bddba1b60bc137af817cb7153f1c2318f5cf
Author: Philip Van Hoof <philip codeminded be>
Date: Tue May 25 18:59:51 2010 +0200
libtracker-db: Use 100 for the progress handler and also check in iter_next
src/libtracker-db/tracker-db-interface-sqlite.c | 30 +++++++++-------------
1 files changed, 12 insertions(+), 18 deletions(-)
---
diff --git a/src/libtracker-db/tracker-db-interface-sqlite.c b/src/libtracker-db/tracker-db-interface-sqlite.c
index 2eb1140..a65e151 100644
--- a/src/libtracker-db/tracker-db-interface-sqlite.c
+++ b/src/libtracker-db/tracker-db-interface-sqlite.c
@@ -54,16 +54,6 @@
#define TRACKER_DB_CURSOR_SQLITE_GET_PRIVATE_O(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRACKER_TYPE_DB_CURSOR_SQLITE, TrackerDBCursorSqlitePrivate))
#define TRACKER_DB_CURSOR_SQLITE_GET_PRIVATE(o) (((TrackerDBCursorSqlite *)o)->priv)
-/* I have no idea what the 'exact' meaning of nOps is in this API call, but
- * experimentally I noticed that 9 is a relatively good value. It has to do
- * with the frequency of check_interrupt being called. Presumably the amount
- * of SQLite 'ops', or something. The documentation of SQLite isn't very
- * enlightening about this either. I guess the higher you can make it, the
- * fewer overhead you induce. I fear, though, that it might depend on the
- * speed of the platform whether or not this value is actually a good value. */
-
-#define SQLITE_PROGRESS_HANDLER_NOPS_VALUE 9
-
typedef struct TrackerDBStatementSqlitePrivate TrackerDBStatementSqlitePrivate;
typedef struct TrackerDBCursorSqlitePrivate TrackerDBCursorSqlitePrivate;
typedef struct TrackerDBCursorSqlite TrackerDBCursorSqlite;
@@ -524,7 +514,7 @@ open_database (TrackerDBInterfaceSqlitePrivate *priv)
}
}
- sqlite3_progress_handler (priv->db, SQLITE_PROGRESS_HANDLER_NOPS_VALUE,
+ sqlite3_progress_handler (priv->db, 100,
check_interrupt, priv);
sqlite3_create_function (priv->db, "SparqlRegex", 3, SQLITE_ANY,
@@ -1217,13 +1207,21 @@ static gboolean
tracker_db_cursor_sqlite_iter_next (TrackerDBCursor *cursor,
GError **error)
{
- TrackerDBCursorSqlitePrivate *priv;
- priv = TRACKER_DB_CURSOR_SQLITE_GET_PRIVATE (cursor);
+ TrackerDBCursorSqlitePrivate *priv = TRACKER_DB_CURSOR_SQLITE_GET_PRIVATE (cursor);
+ TrackerDBStatementSqlite *stmt = priv->ref_stmt;
+ TrackerDBStatementSqlitePrivate *stmt_priv = TRACKER_DB_STATEMENT_SQLITE_GET_PRIVATE (stmt);
+ TrackerDBInterfaceSqlite *iface = stmt_priv->db_interface;
+ TrackerDBInterfaceSqlitePrivate *iface_priv = TRACKER_DB_INTERFACE_SQLITE_GET_PRIVATE (iface);
if (!priv->finished) {
guint result;
- result = sqlite3_step (priv->stmt);
+ if (g_atomic_int_compare_and_exchange (&iface_priv->interrupt, 1, 0)) {
+ result = SQLITE_INTERRUPT;
+ sqlite3_reset (priv->stmt);
+ } else {
+ result = sqlite3_step (priv->stmt);
+ }
if (result == SQLITE_INTERRUPT) {
g_set_error (error,
@@ -1231,10 +1229,6 @@ tracker_db_cursor_sqlite_iter_next (TrackerDBCursor *cursor,
TRACKER_DB_INTERRUPTED,
"Interrupted");
} else if (result != SQLITE_ROW && result != SQLITE_DONE) {
- TrackerDBStatementSqlite *stmt = priv->ref_stmt;
- TrackerDBStatementSqlitePrivate *stmt_priv = TRACKER_DB_STATEMENT_SQLITE_GET_PRIVATE (stmt);
- TrackerDBInterfaceSqlite *iface = stmt_priv->db_interface;
- TrackerDBInterfaceSqlitePrivate *iface_priv = TRACKER_DB_INTERFACE_SQLITE_GET_PRIVATE (iface);
g_set_error (error,
TRACKER_DB_INTERFACE_ERROR,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]