Hello,
I have a hard time finding the cause of a bug in my application. I
believe that it's me doing something wrong and not sqlite since I can't
reproduce the error in a simple example. I have 4 threads mostly reading
data from a database, and all threads open "own" database connections.
I've compiled with the 3.7.13 amalgamation C source file and I'm using
journal_mode = wal and sqlite_threadsafe returns 1.
Pseudo code showing my applications logic:
while(keep_running){
sqlite3_exec ( "SELECT a, b, c FROM table1, table2, table3, table4;");
sqlite3_exec ( "SELECT d, e, f FROM table1, table2;");
if( sqlite3_exec ( "BEGIN IMMEDIATE TRANSACTION;") == SQLITE_OK){
sqlite3_exec ( "INSERT INTO table3 VALUES('1'));");
sqlite3_exec ( "INSERT INTO table4 VALUES('1'));");
sqlite3_exec ( "COMMIT;");
}else{
//failed to start transaction
}
}
What confuses me is that the "BEGIN IMMEDIATE TRANSACTION" sometimes
fails with a SQLITE_BUSY[5] (database is locked) after some iterations
in the loop even though all previous actions so far has returned
SQLITE_OK. All subsequent calls I do to try to begin the transaction
again also fails. Any ideas how that can happen?
I've tried to print debug info from my threads to figure out what's
locking the database, but to my eyes they seem to do what and I didn't
expect the database file to get locked from this usage:
thread action
0x10edf8 select
0x10edf8 select
0x10edf8 begin immediate transaction
0x10edf8 insert
0x10edf8 insert
0x10edf8 commit
(switched to another thread)
0x10d4f8 select
0x10d4f8 select
0x10d4f8 begin immediate transaction
0x10d4f8 insert
0x10d4f8 insert
0x10d4f8 commit
0x10d4f8 select
0x10d4f8 select
0x10d4f8 begin immediate transaction
SQL Error: SQLITE_BUSY[5]: database is locked
0x10d4f8 waiting 1 sec
0x10d4f8 begin immediate transaction
SQL Error: SQLITE_BUSY[5]: database is locked
...
Do you have any idea what can cause my problem? Do you have any
suggestions about how I can dig deeper and debug better to find the real
cause?
Thank you in advance,
Daniel
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users