Il 23/01/2012 16:27, Simon Slavin ha scritto:
On 23 Jan 2012, at 1:56pm, Marcello Botrugno wrote:

When I have four or more threads accessing to the database   I see the error message: 
"database table is locked".
This happens  when a thread begins a new Transaction, probably because another 
thread already has an excluse access to the database.

I supposed that, setting the "busy timeout" to an high value (30 secs in my 
case) should manage this kind of problems, but probably I am wrong or I am not using 
sqlite functions in the right way.
With the 30 second timeone (which, as far as I can tell, you're doing 
correctly) there's no reason for you to see that.

I assume that there are no pauses between your BEGIN and COMMIT statements.  In 
other words, the app doesn't pause for user-input or to do lots of calculations 
while you have the EXCLUSIVE lock.  I also assume you are checking the result 
value from all SQLite calls just in case, one of them unexpectedly returns an 
error.

If possible, you might remove the word 'EXCLUSIVE'.  Just to see whether the 
behaviour changes in any way.  I would also play with the options on the 
_open_v2() call if possible, perhaps just setting SQLITE_OPEN_READWRITE, again, 
just to see if anything changed.

Simon.
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


The problem was in the option SQLITE_OPEN_SHAREDCACHE, infact removing that option the application works fine. It works fine also using SQLITE_OPEN_FULLMUTEX|SQLITE_OPEN_READWRITE or SQLITE_OPEN_READWRITE only .

Thanks again for your help.

_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to