Hi
Although I've read all the rules (and am otherwise aware of what it takes to
report a bug), I want to apologise upfront. I do not have a way to reproduce
this just yet, but I've been seeing way too many diagnostic logs from customers
where their databases are being corrupt primarily on the Mac (the exact same
code is shared between a Mac app, iPhone and iPad) past several months - more
so when I switched to WAL and started dedicating a 'reader' connection for all
reads, and a 'writer' for all writes.
I have read and tried every possible combination of flags and setting up the
connections, making sure (via numerous unit tests) that the code in question is
working, thread safe etc. I recently also switched to SERIALIZED mode (compile
time option) in hope that this would go away. When this started happening on a
daily basis a coupe of months ago, I read on the forums that mmap could be at
fault (as I was using it). Disabling it almost immediately felt that it solved
the problem. However I'm still occasionally now getting reports (weekly) of
users running into a "database disk image is malformed" error. I've asked one
of the users to send us a copy of the corrupt database, but this isn't always
possible (waiting on them).
I open for writing using:
BOOL dbOpened = (sqlite3_open_v2(path.UTF8String, &dbConnection,
SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_FULLMUTEX, NULL) ==
SQLITE_OK);
if (sqlite3_exec(dbConnection, "PRAGMA main.journal_mode=WAL; PRAGMA
synchronous=normal;", NULL, NULL, NULL) != SQLITE_OK) {
...
}
And for reading:
BOOL dbOpened = (sqlite3_open_v2(path.UTF8String, &readOnlyDB,
SQLITE_OPEN_FULLMUTEX | SQLITE_OPEN_READONLY | SQLITE_OPEN_WAL, NULL) ==
SQLITE_OK)
if (sqlite3_exec(readOnlyDB, "PRAGMA read_uncommitted=1; PRAGMA query_only=1;
PRAGMA synchronous=normal;", NULL, NULL, NULL) != SQLITE_OK) {
...
}
I frequently would run VACUUM and ANALYZE but stopped doing that as well (in
order to single this issue out), but am still seeing these error reports come
in.
I'm using the latest SQL amalgamation (v3.20.0) with the following compile time
options:
#define SQLITE_ENABLE_FTS3 1
#define SQLITE_THREADSAFE 2
#define SQLITE_DEFAULT_MEMSTATUS 0
#define SQLITE_ENABLE_STAT4 1
#define SQLITE_MAX_MMAP_SIZE 0
#define SQLITE_OMIT_DEPRECATED 1
#define SQLITE_OMIT_SHARED_CACHE 1
Any help would be appreciated.
Thanks
Fahad
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users