aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/plugins/sqlite/sqlite_database.c
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2008-08-21 09:25:06 +0000
committerMartin Willi <martin@strongswan.org>2008-08-21 09:25:06 +0000
commit2d6559b107152a0d348da68371c4f6b86649e02c (patch)
tree6bc8f3a850d0f9f3537adbffd2e48f45c08e9474 /src/libstrongswan/plugins/sqlite/sqlite_database.c
parent02e907fe664a574fcf827cb2a95ee00d528daf1e (diff)
downloadstrongswan-2d6559b107152a0d348da68371c4f6b86649e02c.tar.bz2
strongswan-2d6559b107152a0d348da68371c4f6b86649e02c.tar.xz
added sqlite busy handler: retries on locking conflicts
Diffstat (limited to 'src/libstrongswan/plugins/sqlite/sqlite_database.c')
-rw-r--r--src/libstrongswan/plugins/sqlite/sqlite_database.c14
1 files changed, 14 insertions, 0 deletions
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 <sqlite3.h>
+#include <unistd.h>
#include <library.h>
#include <debug.h>
#include <utils/mutex.h>
@@ -290,6 +291,17 @@ static db_driver_t get_driver(private_sqlite_database_t *this)
}
/**
+ * 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
*/
static void destroy(private_sqlite_database_t *this)
@@ -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;
}