commit 6c18f9883978b7890a61b3c3fdd1599615d8d765
parent ead9e7830bd741e7b6321eac07ee4bc8eb76a94f
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Fri, 27 Oct 2023 03:23:31 +0200

fix(bridge/messagelogger): database connection leak

Diffstat:
Mcommon/src/main/kotlin/me/rhunk/snapenhance/common/bridge/wrapper/MessageLoggerWrapper.kt | 33+++++++++++++++++++++++----------
1 file changed, 23 insertions(+), 10 deletions(-)

diff --git a/common/src/main/kotlin/me/rhunk/snapenhance/common/bridge/wrapper/MessageLoggerWrapper.kt b/common/src/main/kotlin/me/rhunk/snapenhance/common/bridge/wrapper/MessageLoggerWrapper.kt @@ -10,18 +10,31 @@ import java.util.UUID class MessageLoggerWrapper( private val databaseFile: File ): MessageLoggerInterface.Stub() { - private lateinit var database: SQLiteDatabase + private var _database: SQLiteDatabase? = null + + private val database get() = synchronized(this) { + _database?.takeIf { it.isOpen } ?: run { + _database?.close() + val openedDatabase = SQLiteDatabase.openDatabase(databaseFile.absolutePath, null, SQLiteDatabase.CREATE_IF_NECESSARY or SQLiteDatabase.OPEN_READWRITE) + SQLiteDatabaseHelper.createTablesFromSchema(openedDatabase, mapOf( + "messages" to listOf( + "id INTEGER PRIMARY KEY", + "conversation_id VARCHAR", + "message_id BIGINT", + "message_data BLOB" + ) + )) + _database = openedDatabase + openedDatabase + } + } + + protected fun finalize() { + _database?.close() + } fun init() { - database = SQLiteDatabase.openDatabase(databaseFile.absolutePath, null, SQLiteDatabase.CREATE_IF_NECESSARY or SQLiteDatabase.OPEN_READWRITE) - SQLiteDatabaseHelper.createTablesFromSchema(database, mapOf( - "messages" to listOf( - "id INTEGER PRIMARY KEY", - "conversation_id VARCHAR", - "message_id BIGINT", - "message_data BLOB" - ) - )) + } override fun getLoggedIds(conversationId: Array<String>, limit: Int): LongArray {