From 2d6559b107152a0d348da68371c4f6b86649e02c Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Thu, 21 Aug 2008 09:25:06 +0000 Subject: [PATCH] added sqlite busy handler: retries on locking conflicts --- src/libstrongswan/plugins/sqlite/sqlite_database.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/libstrongswan/plugins/sqlite/sqlite_database.c b/src/libstrongswan/plugins/sqlite/sqlite_database.c index c1927b5be..2d41219da 100644 --- a/src/libstrongswan/plugins/sqlite/sqlite_database.c +++ b/src/libstrongswan/plugins/sqlite/sqlite_database.c @@ -18,6 +18,7 @@ #include "sqlite_database.h" #include +#include #include #include #include @@ -289,6 +290,17 @@ static db_driver_t get_driver(private_sqlite_database_t *this) return DB_SQLITE; } +/** + * Busy handler implementation + */ +static int busy_handler(private_sqlite_database_t *this, int count) +{ + /* add an sleep, exponentially longer on every try */ + usleep(count * count * 1000); + /* always retry */ + return 1; +} + /** * Implementation of database_t.destroy */ @@ -333,6 +345,8 @@ sqlite_database_t *sqlite_database_create(char *uri) return NULL; } + sqlite3_busy_handler(this->db, (void*)busy_handler, this); + return &this->public; }