fix(bridge/messagelogger): database connection leak

This commit is contained in:
rhunk 2023-10-27 03:23:31 +02:00
parent ead9e7830b
commit 6c18f98839

View File

@ -10,11 +10,13 @@ import java.util.UUID
class MessageLoggerWrapper( class MessageLoggerWrapper(
private val databaseFile: File private val databaseFile: File
): MessageLoggerInterface.Stub() { ): MessageLoggerInterface.Stub() {
private lateinit var database: SQLiteDatabase private var _database: SQLiteDatabase? = null
fun init() { private val database get() = synchronized(this) {
database = SQLiteDatabase.openDatabase(databaseFile.absolutePath, null, SQLiteDatabase.CREATE_IF_NECESSARY or SQLiteDatabase.OPEN_READWRITE) _database?.takeIf { it.isOpen } ?: run {
SQLiteDatabaseHelper.createTablesFromSchema(database, mapOf( _database?.close()
val openedDatabase = SQLiteDatabase.openDatabase(databaseFile.absolutePath, null, SQLiteDatabase.CREATE_IF_NECESSARY or SQLiteDatabase.OPEN_READWRITE)
SQLiteDatabaseHelper.createTablesFromSchema(openedDatabase, mapOf(
"messages" to listOf( "messages" to listOf(
"id INTEGER PRIMARY KEY", "id INTEGER PRIMARY KEY",
"conversation_id VARCHAR", "conversation_id VARCHAR",
@ -22,6 +24,17 @@ class MessageLoggerWrapper(
"message_data BLOB" "message_data BLOB"
) )
)) ))
_database = openedDatabase
openedDatabase
}
}
protected fun finalize() {
_database?.close()
}
fun init() {
} }
override fun getLoggedIds(conversationId: Array<String>, limit: Int): LongArray { override fun getLoggedIds(conversationId: Array<String>, limit: Int): LongArray {