> No, I did not.  I am not storing any blobs right now, but...  Is the busy
> handler going to kick in?  I know the busy handler is not the sole answer to
> the problem, but it does seem to catch most of my SQLITE_BUSY issues since
> all data is pretty small.

No, this SQLITE_BUSY result is not related to database locking and so
busy handler is not called. You can force connection closing in case
of SQLITE_BUSY result by forcible finalizing of all statements. Use
http://www.sqlite.org/c3ref/next_stmt.html for iterating all
statements and sqlite3_finalize on each of them. After that
sqlite3_close should complete successfully.


Pavel

On Tue, Jun 22, 2010 at 9:48 AM, Sam Carleton
<scarle...@miltonstreet.com> wrote:
> On Tue, Jun 22, 2010 at 9:15 AM, Pavel Ivanov <paiva...@gmail.com> wrote:
>
>> > The idea is that the copy and nulling happens very quickly where the
>> > sqlite3_close is more expensive, do the copy/null very quickly so that if
>> > another thread calls Close during the first threads execution of
>> > sqlite3_close, the second thread finds m_db null and will not call
>> > sqlite3_close.
>>
>> Wow, if you really relied on that then you did too few of
>> mutli-threaded programming. The rule of thumb is: no matter how fast
>> you think 2 different operations execute there always will be a
>> situation when another thread executes something between those 2
>> operations (and that "something" can be a very big chunk of code). So
>> you must protect it with some mutex or you can use atomic swaps (but
>> they are platform- and compiler-dependent).
>>
>
> Yea, I know it isn't as safe as it should be, but in this case it is one
> class per thread.  Why I am doing it, I don't know, old habit that I just
> cannot seem to break.  In light of your next statement, I think I will
> change it;)
>
>
>> Another problem with this code (which is not related to the crash): do
>> you know that sqlite3_close can return SQLITE_BUSY when there are some
>> statements or BLOB handles still open and not finalized?
>>
>
> No, I did not.  I am not storing any blobs right now, but...  Is the busy
> handler going to kick in?  I know the busy handler is not the sole answer to
> the problem, but it does seem to catch most of my SQLITE_BUSY issues since
> all data is pretty small.
>
> Sam
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to