"D. Richard Hipp" said...

SQLite version 3.7.16.2 is now available on the SQLite website

  http://www.sqlite.org/

The 3.7.16.2 patch release contains a two-character change in the Windows OS interface that fixes a long-standing race condition that could lead to database corruption. This bug has apparently existed in the code every since version 3.0.0. The corruption opportunity arises as follows:

(1) A process crashes or is killed while in the middle of a COMMIT, leaving behind a hot journal that needs to be recovered. (2) Two or more new processes attach to the database and try to run the recovery at the same time.

If step (2) happens on a fast multi-core machine, and you are unlucky, then the xCheckReservedLock() method of the OS interface object might return a false positive result, deceiving one of processes into thinking that the recovery had already been accomplished and causing that process to delete the rollback journal and thereby corrupting the database.

Note that this flaw was present in the Windows interface only. The unix/posix OS interface works correctly. For unix, the only thing that has changed between version 3.7.16.1 and 3.7.16.2 is the version number.

We have an application that uses a shared SQLite file and many times during the day multiple PCs connect to that file at the same time. Some to get data others to COMMIT data. Can this problem also from a DB file shared via Windows Shared folder with connection from two different PC? We had a mayor problem, one day where we lost all of the data updates. We had to recover the previous night file and re-enter the lost data. So, I am wondering if this was the cause. Thanks.

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

Reply via email to