From c03a183904ad25d92842754bc574c1894f505b01 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Mon, 12 Dec 2022 10:03:15 -0500 Subject: [PATCH] Fix transaction issue on backup restore. --- .../securesms/database/SignalDatabase.kt | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt index b185e29363..8dba74d7cb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt @@ -6,6 +6,7 @@ import androidx.annotation.VisibleForTesting import net.zetetic.database.sqlcipher.SQLiteOpenHelper import org.signal.core.util.SqlUtil import org.signal.core.util.logging.Log +import org.signal.core.util.withinTransaction import org.thoughtcrime.securesms.crypto.AttachmentSecret import org.thoughtcrime.securesms.crypto.DatabaseSecret import org.thoughtcrime.securesms.crypto.MasterSecret @@ -275,17 +276,19 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data @JvmStatic fun upgradeRestored(database: net.zetetic.database.sqlcipher.SQLiteDatabase) { synchronized(SignalDatabase::class.java) { - instance!!.onUpgrade(database, database.getVersion(), -1) - instance!!.markCurrent(database) - instance!!.sms.deleteAbandonedMessages() - instance!!.mms.deleteAbandonedMessages() - instance!!.mms.trimEntriesForExpiredMessages() - instance!!.reactionTable.deleteAbandonedReactions() - instance!!.rawWritableDatabase.execSQL("DROP TABLE IF EXISTS key_value") - instance!!.rawWritableDatabase.execSQL("DROP TABLE IF EXISTS megaphone") - instance!!.rawWritableDatabase.execSQL("DROP TABLE IF EXISTS job_spec") - instance!!.rawWritableDatabase.execSQL("DROP TABLE IF EXISTS constraint_spec") - instance!!.rawWritableDatabase.execSQL("DROP TABLE IF EXISTS dependency_spec") + database.withinTransaction { db -> + instance!!.onUpgrade(db, db.getVersion(), -1) + instance!!.markCurrent(db) + instance!!.sms.deleteAbandonedMessages() + instance!!.mms.deleteAbandonedMessages() + instance!!.mms.trimEntriesForExpiredMessages() + instance!!.reactionTable.deleteAbandonedReactions() + instance!!.rawWritableDatabase.execSQL("DROP TABLE IF EXISTS key_value") + instance!!.rawWritableDatabase.execSQL("DROP TABLE IF EXISTS megaphone") + instance!!.rawWritableDatabase.execSQL("DROP TABLE IF EXISTS job_spec") + instance!!.rawWritableDatabase.execSQL("DROP TABLE IF EXISTS constraint_spec") + instance!!.rawWritableDatabase.execSQL("DROP TABLE IF EXISTS dependency_spec") + } instance!!.rawWritableDatabase.close() triggerDatabaseAccess()