My iOS app displays a gallery of thumbnails in a tableView (four to a row). To
allow smooth scrolling, I lazy-load the image data on a background thread using
dispatch_async().
sqlite3_threadsafe() returns true.
sqlite3_open_v2() uses SQLITE_OPEN_FULLMUTEX.
queue is a serial queue from dispatch_queue_create(...).
There is only one connection to the database.
lazy load summary logic:
dispatch_async(queue, ^{
done once: sqlite3_prepare_v2( "SELECT ..." ... );
sqlite3_bind_int(...);
sqlite3_bind_int(...);
sqlite3_step(); // occasionally crashes here (showing ESC_BAD_ACCESS
on main thread)
... sqlite3_column_blob(...);
... sqlite3_column_bytes(...);
// ...
// occasionally crashes here (showing ESC_BAD_ACCESS on main thread)
not inside SQLite
// ...
sqlite3_reset();
});
The main thread is not doing anything with the DB when the crash occurs (it has
previously loaded an array with all the id values needed for the lazy-load's
SELECT statement). It doesn't crash very often (might take 10, 20 or 30
trials), but when it happens, it crashes while loading one of the first few
thumbnails.
It's not a zombie object issue (tested with NSZombieEnabled).
Any ideas on how to debug this?
Jeff