Hi again, the bug was introduced in revision 1.573 of pager.c.
Best regards, Filip Navara On Fri, Apr 17, 2009 at 2:26 PM, Filip Navara <filip.nav...@gmail.com> wrote: > > Hello, > > today I tried to upgrade our software from SQLite version 3.6.3 to version > 3.6.13 and I am hitting a race condition that I believe is a bug in the > library. The library is compiled as thread-safe (and it's reproducible even > with the precompiled DLL). Sometimes sqlite3_step fails with SQLITE_CANTOPEN > error. I traced it with Process Monitor and each time the error happened, > this could be seen in the log: > > (time / process / PID / function name / file name / result of the call / > parameters / thread ID) > 12:27:55.1443678 PM eM Client.vshost.exe 3308 LockFile folders.dat SUCCESS > Exclusive: True, Offset: 1,073,741,825, Length: 1, Fail Immediately: True 5052 > 12:27:55.1443826 PM eM Client.vshost.exe 3308 UnlockFileSingle folders.dat > SUCCESS Offset: 1,073,741,825, Length: 1 5052 > 12:27:55.1443944 PM eM Client.vshost.exe 3308 QueryStandardInformationFile > folders.dat SUCCESS AllocationSize: 32,768, EndOfFile: 21,504, NumberOfLinks: > 1, DeletePending: False, Directory: False 5052 > 12:27:55.1445976 PM eM Client.vshost.exe 3308 CreateFile folders.dat-journal > SUCCESS Desired Access: Generic Read, Disposition: Open, Options: Synchronous > IO Non-Alert, Non-Directory File, Attributes: N, ShareMode: None, > AllocationSize: n/a, OpenResult: Opened 5052 > 12:27:55.1447616 PM eM Client.vshost.exe 3308 CreateFile folders.dat-journal > SHARING VIOLATION Desired Access: Generic Read, Disposition: Open, Options: > Synchronous IO Non-Alert, Non-Directory File, Attributes: N, ShareMode: None, > AllocationSize: n/a 5804 > 12:27:55.1447930 PM eM Client.vshost.exe 3308 ReadFile folders.dat-journal > SUCCESS Offset: 0, Length: 1, Priority: Normal 5052 > 12:27:55.1448185 PM eM Client.vshost.exe 3308 UnlockFileSingle folders.dat > SUCCESS Offset: 1,073,741,826, Length: 510 5804 > 12:27:55.1448268 PM eM Client.vshost.exe 3308 CloseFile folders.dat-journal > SUCCESS 5052 > There are two threads accessing the folders.dat database at the same time, > the first one (5052) succeeds, while the other one (5804) fails when checking > for hot journal. Here are the stack traces of the two threads during the > CreateFile calls (both against the sqlite3.c 3.6.13 amalgamation). > > Thread 5052: > 14 sqlite3.dll winOpen + 0x139, sqlite3.c(27454) 0x100067d6 > 15 sqlite3.dll sqlite3OsOpen + 0x19, sqlite3.c(11655) 0x100095ed > 16 sqlite3.dll hasHotJournal + 0xce, sqlite3.c(33360) 0x1000ac42 > 17 sqlite3.dll pagerSharedLock + 0x102, sqlite3.c(33499) 0x100093c0 > 18 sqlite3.dll sqlite3PagerAcquire + 0x41, sqlite3.c(33732) 0x10008c21 > 19 sqlite3.dll sqlite3BtreeGetPage + 0x19, sqlite3.c(37419) 0x1000c92a > 20 sqlite3.dll lockBtree + 0x16, sqlite3.c(38097) 0x1000c6ee > 21 sqlite3.dll sqlite3BtreeBeginTrans + 0xe5,sqlite3.c(38366) 0x1000c434 > 22 sqlite3.dll sqlite3VdbeExec + 0x2e59, sqlite3.c(52191) 0x10019223 > 23 sqlite3.dll sqlite3Step + 0x161,sqlite3.c(48601) 0x10014d9d > 24 sqlite3.dll sqlite3_step + 0x3d, sqlite3.c(48675) 0x10014aaf > Thread 5804: > 14 sqlite3.dll winOpen + 0x139, sqlite3.c(27454) 0x100067d6 > 15 sqlite3.dll sqlite3OsOpen + 0x19, sqlite3.c(11655) 0x100095ed > 16 sqlite3.dll hasHotJournal + 0xce, sqlite3.c(33360) 0x1000ac42 > 17 sqlite3.dll pagerSharedLock + 0x102, sqlite3.c(33499) 0x100093c0 > 18 sqlite3.dll sqlite3PagerAcquire + 0x41, sqlite3.c(33732) 0x10008c21 > 19 sqlite3.dll sqlite3BtreeGetMeta + 0x6e, sqlite3.c(42972) 0x1000ed7e > 20 sqlite3.dll sqlite3VdbeExec + 0x2f05, sqlite3.c(52230) 0x100192cf > 21 sqlite3.dll sqlite3Step + 0x161, sqlite3.c(48601) 0x10014d9d > 22 sqlite3.dll sqlite3_step + 0x3d, sqlite3.c(48675) 0x10014aaf > I believe it's incorrect behavior to return SQLITE_CANTOPEN to the > application in that case. I'm not sure what would be the correct solution > (setting sharing mode in winOpen?). Anyone can help or offer any insight? > Thanks, > Filip Navara _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users