On 09/12/2018 08:56 PM, Nic Ramage wrote:
Hi,

I think I have found a regression/bug in Sqlite with respect to
the sqlite3_get_autocommit() function.



Hi,

Thanks for putting in the work to create the bug demo. Bisecting the latest SQLite commits using it shows that this bug was fixed here:

  https://www.sqlite.org/src/info/e6108047cb136119

Fix will appear in 3.25.0 (currently undergoing release testing).

Dan.






Sometimes, when multiple connections are used in multiple threads,
sqlite3_get_autocommit()  reports that the connection has a transaction
open (i.e. not in auto commit mode), even though sqlite3_step() returns
SQLITE_BUSY.  I have verified that sqlite3_get_autocommit()  reports that
there is no transaction open before sqlite3_step() is called.  The problem
seems to be specific to the WAL journal mode, as I haven't been able to
reproduce it for

Initially, the problem only showed up under Linux, but I have now been able
to reproduce the problem on Windows too.  For me it shows up quicker under
linux, but that may just be because of the difference in environments.  I
have attached a single-file C++11 application that consistently reproduces
the problem for me.

I was also able to bisect the introduction of the problem to sqlite
v3.17.0.  v3.16.2 does not have the problem.  The latest 3.24.0 release
does.  I am not an expert on the sqlite source code, but during my
debugging, I was able to determine that the auto commit flag was being
cleared in "case OP_AutoCommit", which returns without error.  Obviously,
something else must be causing the  SQLITE_BUSY afterwards, but is not
resetting the auto commit flag.

In my code, I have worked around the problem by issuing a "rollback"
whenever I detect the problem described.

I hope this is enough information to be able to solve the bug.  If,
however, this behaviour turns out not to be a bug, but something that is
expected to happen occasionally, then the "rollback" provides a reasonable
way to mitigate the issue.

Regards
Nic



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


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

Reply via email to