-
Notifications
You must be signed in to change notification settings - Fork 31
Description
Since we updated our library from android-database-sqlcipher
to sqlcipher-android
we've been getting multiple instances of these crashes:
Fatal Exception: android.database.sqlite.SQLiteOutOfMemoryException
out of memory (code 7): , while compiling: SELECT COUNT(*) FROM sqlite_schema;
net.zetetic.database.sqlcipher.SQLiteConnection.nativePrepareStatement (SQLiteConnection.java)
net.zetetic.database.sqlcipher.SQLiteConnection.acquirePreparedStatement (SQLiteConnection.java:973)
net.zetetic.database.sqlcipher.SQLiteConnection.executeForLong (SQLiteConnection.java:628)
net.zetetic.database.sqlcipher.SQLiteConnection.open (SQLiteConnection.java:240)
net.zetetic.database.sqlcipher.SQLiteConnection.open (SQLiteConnection.java:202)
net.zetetic.database.sqlcipher.SQLiteConnectionPool.openConnectionLocked (SQLiteConnectionPool.java:474)
net.zetetic.database.sqlcipher.SQLiteConnectionPool.open (SQLiteConnectionPool.java:188)
net.zetetic.database.sqlcipher.SQLiteConnectionPool.open (SQLiteConnectionPool.java:180)
net.zetetic.database.sqlcipher.SQLiteDatabase.openInner (SQLiteDatabase.java:1028)
net.zetetic.database.sqlcipher.SQLiteDatabase.open (SQLiteDatabase.java)
net.zetetic.database.sqlcipher.SQLiteDatabase.openDatabase (SQLiteDatabase.java:840)
net.zetetic.database.sqlcipher.SQLiteOpenHelper.getDatabaseLocked (SQLiteOpenHelper.java:359)
net.zetetic.database.sqlcipher.SQLiteOpenHelper.getWritableDatabase (SQLiteOpenHelper.java:278)
net.zetetic.database.sqlcipher.SupportHelper.getWritableDatabase (SupportHelper.java:60)
androidx.room.driver.SupportSQLiteDriver.open (SupportSQLiteDriver.android.kt:26)
androidx.room.driver.SupportSQLiteConnectionPool.getSupportConnection (SupportSQLiteConnectionPool.android.kt:35)
androidx.room.driver.SupportSQLiteConnectionPool.useConnection (SupportSQLiteConnectionPool.android.kt)
androidx.room.RoomConnectionManager.useConnection (RoomConnectionManager.android.kt:126)
androidx.room.RoomDatabase.useConnection$room_runtime_release (RoomDatabase.android.kt:593)
androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1.invokeSuspend (DBUtil.android.kt:247)
androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1.invoke (DBUtil.android.kt:2)
androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1.invoke (DBUtil.android.kt:1)
This is just an example, we get the same android.database.sqlite.SQLiteOutOfMemoryException
when SqlCipher calls getReadableDatabase
, on multiple databases and on both Room and Content Provider.
This happens across all kinds of devices and OS versions, so it is not a limited subset of our user base.
Devices | OS |
---|---|
![]() |
![]() |
We have 2 databases, one accessed via Room, one via Content Providers.
At app startup, I see:
Database keying operation returned:0
Database keying operation returned:0
Database keying operation returned:0
Database keying operation returned:0
Database keying operation returned:0
Does this mean at least one of the 2 databases gets opened multiple times? I am providing access to these databases via singletons, so this shouldn't be happening, unless there is a race condition somewhere.
Is there any way to understand the actual reason behind this error?