From 62c5109fb1dd650531b09440add5481a27cad8cb Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Fri, 22 Jul 2016 11:17:45 +0100 Subject: [PATCH] [Feature] Wait for sqlite if locked when switching to WAL mode --- src/libutil/sqlite_utils.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/libutil/sqlite_utils.c b/src/libutil/sqlite_utils.c index e7768142c..5c437b654 100644 --- a/src/libutil/sqlite_utils.c +++ b/src/libutil/sqlite_utils.c @@ -476,9 +476,21 @@ rspamd_sqlite3_open_or_create (rspamd_mempool_t *pool, const gchar *path, const } } - if (sqlite3_exec (sqlite, sqlite_wal, NULL, NULL, NULL) != SQLITE_OK) { + while ((rc = sqlite3_exec (sqlite, sqlite_wal, NULL, NULL, NULL)) != SQLITE_OK) { + if (rc == SQLITE_BUSY) { + struct timespec sleep_ts = { + .tv_sec = 0, + .tv_nsec = 1000000 + }; + + nanosleep (&sleep_ts, NULL); + + continue; + } + msg_warn_pool_check ("WAL mode is not supported (%s), locking issues might occur", sqlite3_errmsg (sqlite)); + break; } if (sqlite3_exec (sqlite, fsync_sql, NULL, NULL, NULL) != SQLITE_OK) { -- 2.39.5