On Oct 7, 2009, at 11:21 PM, Pavel Ivanov wrote: > Hi, Dan! > > I've found another bug in async io module. It happens only > occasionally in my application but I've found how to perfectly > reproduce it. You need to: > - not call sqlite3async_run(); > - open new not yet existing database; > - execute PRAGMA journal_mode = PERSIST; > - execute any 2 statements needing a transaction, e.g. some CREATE > TABLE
Thanks again. Now here: http://www.sqlite.org/src/info/897b96d49d Dan. > > In this scenario (when connection uses async io module) last statement > returns error SQLITE_CANTOPEN. > > I've investigated why it's happening. In first transaction when SQLite > opens journal file async module determines that this opening should > happen asynchronously and puts ASYNC_OPENEXCLUSIVE into the queue. > Then at the end of transaction journal file is closed and everything > is ok. When SQLite starts 2nd transaction it checks (inside > hasHotJournal() ) for journal existence and async module returns "yes" > because of ASYNC_OPENEXCLUSIVE in the event queue. Then SQLite tries > to open journal for reading and async module determines that it should > be done immediately. It try to physically open journal and fail > because file does not exist yet. So SQLite decides that there is hot > journal tries to open it again for read/write (inside > sqlite3PageSharedLock() ) and fails again because file doesn't exist > yet. And this error is already goes as a return code from > sqlite3_step(). > > > Pavel > > On Wed, Oct 7, 2009 at 9:57 AM, Dan Kennedy <danielk1...@gmail.com> > wrote: >> >> On Oct 7, 2009, at 6:42 PM, Pavel Ivanov wrote: >> >>> Hi! >>> >>> As anonymous users are not allowed to file bug reports on SQLite >>> site >>> anymore so I'm sending it here. >>> >>> I've encountered segmentation fault at sqlite3async.c:715. The >>> problem >>> is on sqlite3async.c:712: >>> >>> nCopy = (int)MIN(pWrite->nByte-iBeginIn, iAmt-iBeginOut); >>> >>> My actual numbers: iAmt = 16, iBeginOut = 2147844072. After >>> subtraction we're getting -2147844056 or FFFFFFFF7FFA8028 in hex >>> which >>> after truncating to int gives 7FFA8028, a positive number. And it >>> blows away the next check if( nCopy>0 ). >> >> Thanks. Ticket now posted here: >> >> http://www.sqlite.org/src/info/94c04eaadb >> >> Dan. >> >> _______________________________________________ >> 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 _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users