sqlite: include busy wait for locks
authorSam Hartman <hartmans@debian.org>
Thu, 12 Mar 2015 18:49:04 +0000 (14:49 -0400)
committerSam Hartman <hartmans@debian.org>
Wed, 18 Mar 2015 19:49:28 +0000 (15:49 -0400)
Previously, sqlite would fail any query if there was a lock held on
the database, such as an outstanding write.  In practice this
generated failures even with low-volume writes to the database.
Permit a query to hang for up to 200 ms.

src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c

index 2b98ea6..869eb73 100644 (file)
@@ -403,7 +403,9 @@ static sql_rcode_t sql_socket_init(rlm_sql_handle_t *handle, rlm_sql_config_t *c
        INFO("rlm_sql_sqlite: Opening SQLite database \"%s\"", driver->filename);
 #ifdef HAVE_SQLITE3_OPEN_V2
        status = sqlite3_open_v2(driver->filename, &(conn->db), SQLITE_OPEN_READWRITE | SQLITE_OPEN_NOMUTEX, NULL);
+       sqlite3_busy_timeout( conn->db, 200); /*wait up to 200 ms for db locks*/
 #else
+       
        status = sqlite3_open(driver->filename, &(conn->db));
 #endif
        if (!conn->db) {