Nick wrote:
> I use sqlite3_open() to open two connections, and I have configured
> journal_mode=WAL, threadsafe=2.
> Connection 1 is doing:
> sqlite3_exec(db1, "BEGIN", 0, 0, &zErrMsg);
> sqlite3_exec(db1, "SELECT * FROM t1;", 0, 0, &zErrMsg);
> sqlite3_exec(db1, "INSERT INTO t1 VALUES(1, 1, \"aa\”)”, 0, 0, &zErrMsg);
> sqlite3_exec(db1, "COMMIT", 0, 0, &zErrMsg);
> I got that SQLITE_BUSY as connection 2 was writing the db at the same time.
> I have called sqlite3_busy_timeout() but I find that it does not work if
> INSERT runs after a SELECT within BEGIN and COMMIT.

When you have two connections that upgrade from a read-only transaction
to a read-write transaction, you would get a deadlock.

Use "BEGIN IMMEDIATE" instead to tell the DB that you intend to write.

sqlite-users mailing list

Reply via email to