]> source.dussan.org Git - rspamd.git/commitdiff
[Feature] Wait for sqlite if locked when switching to WAL mode
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 22 Jul 2016 10:17:45 +0000 (11:17 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 22 Jul 2016 10:17:45 +0000 (11:17 +0100)
src/libutil/sqlite_utils.c

index e7768142cc1953ba420fa96f941f580011640699..5c437b65488a7bc8b6bde608132558933416bc3d 100644 (file)
@@ -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) {