]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
add retry on lock to core sql func
authorAnthony Minessale <anthony.minessale@gmail.com>
Tue, 4 Dec 2007 23:03:05 +0000 (23:03 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Tue, 4 Dec 2007 23:03:05 +0000 (23:03 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@6505 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/switch_core_db.c

index 6c5a822f1d30493620856e7979075b0c20612a08..6ecee68c25c6872e85d9289e9961bbf8b7187a4f 100644 (file)
@@ -79,7 +79,22 @@ SWITCH_DECLARE(const char *) switch_core_db_errmsg(switch_core_db_t *db)
 
 SWITCH_DECLARE(int) switch_core_db_exec(switch_core_db_t *db, const char *sql, switch_core_db_callback_func_t callback, void *data, char **errmsg)
 {
-       return sqlite3_exec(db, sql, callback, data, errmsg);
+       int ret;
+       int sane = 100;
+
+       while(--sane > 0) {
+               ret = sqlite3_exec(db, sql, callback, data, errmsg);
+
+               if (ret == SQLITE_BUSY || ret == SQLITE_LOCKED) {
+                       switch_safe_free(*errmsg);
+                       switch_yield(1000);
+                       continue;
+               } else {
+                       break;
+               }
+       }
+
+       return ret;
 }
 
 SWITCH_DECLARE(int) switch_core_db_finalize(switch_core_db_stmt_t *pStmt)