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