diff options
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; } |