From: Vsevolod Stakhov Date: Thu, 28 Jul 2016 17:34:19 +0000 (+0100) Subject: [Minor] Fighting with windmills (sqlite locking) X-Git-Tag: 1.3.1~34 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=597d9e0af6119b123dce1c7106819fd62609446c;p=rspamd.git [Minor] Fighting with windmills (sqlite locking) --- diff --git a/src/libutil/sqlite_utils.c b/src/libutil/sqlite_utils.c index 376a4eca1..04b71ca63 100644 --- a/src/libutil/sqlite_utils.c +++ b/src/libutil/sqlite_utils.c @@ -372,7 +372,18 @@ rspamd_sqlite3_open_or_create (rspamd_mempool_t *pool, const gchar *path, const } if (create_sql) { - if (sqlite3_exec (sqlite, create_sql, NULL, NULL, NULL) != SQLITE_OK) { + while ((rc = sqlite3_exec (sqlite, create_sql, NULL, NULL, NULL)) != SQLITE_OK) { + if (rc == SQLITE_BUSY) { + struct timespec sleep_ts = { + .tv_sec = 0, + .tv_nsec = 1000000 + }; + + nanosleep (&sleep_ts, NULL); + + continue; + } + g_set_error (err, rspamd_sqlite3_quark (), -1, "cannot execute create sql `%s`: %s", create_sql, sqlite3_errmsg (sqlite));