diff options
author | Martin Willi <martin@strongswan.org> | 2008-08-21 09:25:06 +0000 |
---|---|---|
committer | Martin Willi <martin@strongswan.org> | 2008-08-21 09:25:06 +0000 |
commit | 2d6559b107152a0d348da68371c4f6b86649e02c (patch) | |
tree | 6bc8f3a850d0f9f3537adbffd2e48f45c08e9474 /src/libstrongswan/plugins/sqlite/sqlite_database.c | |
parent | 02e907fe664a574fcf827cb2a95ee00d528daf1e (diff) | |
download | strongswan-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.c | 14 |
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; } |