> Does the application work if you configure SQLite to serialized mode? Yes. But I am confused why serialized mode works while multi-thread mode always cause crashes because I also wrap calls around statement handle.
> even if you wrap the sqlite3_ calls... you'll need to wrap the entire > lifetime of the statment... Do I need to do this in serialized mode (suppose I use a single connection across multiple threads)? ---------------------------------------- > Date: Sun, 8 Feb 2015 03:31:46 -0800 > From: [email protected] > To: [email protected] > Subject: Re: [sqlite] Multi-thread mode question > > it's better to use a connection per thread... the connection resource isn't > very big... > even if you wrap the sqlite3_ calls... you'll need to wrap the entire > lifetime of the statment... if you do a execute and then start stepping and > getting values while another thread starts another statement... that's 3 > individual locks, but it doesn't lock the context of the statement being > used... it will lead to bizarre crashes in the database; similar to > double-releasing memory or delayed reference of memory that has been > released. > > On Sun, Feb 8, 2015 at 3:00 AM, Dan Kennedy <[email protected]> wrote: > >> On 02/08/2015 04:30 PM, Neo Anderson wrote: >> >>> The doc says: >>> >>> Multi-thread. >>> In this mode, SQLite can be safely used by multiple threads provided that >>> no single database connection is used simultaneously in two or more >>> threads. >>> >>> I have a scenario that every sqlite3_calls around a single database >>> connection is protected by a recursive mutex, but I have very strange >>> runtime error in sqlite3.c and each time the error occurs at a different >>> place. >>> >>> Does this mean the following statement is true: >>> >>> In muti-thead mode, a single database connection cannot be shared among >>> threads even if any activity around the connection is protected by a mutex. >>> >> >> Not true. >> >> The only difference between multi-threaded and serialized mode is that, >> internally, every sqlite3_xxx() API call grabs a recursive mutex to prevent >> two threads from simultaneously accessing the database handle structure. >> i.e. the same thing your code is doing externally. >> >> Note that calls on statement handles (i.e. sqlite3_step(), >> sqlite3_column_text() etc.) count as calls on the database handle that >> created them. So you need to protect them with the same mutex. >> >> Does the application work if you configure SQLite to serialized mode? >> >> Dan. >> >> >> >> _______________________________________________ >> sqlite-users mailing list >> [email protected] >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >> > _______________________________________________ > sqlite-users mailing list > [email protected] > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list [email protected] http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

