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 395dc0a126..8506a94ee2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt @@ -168,7 +168,9 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data db.version = newVersion db.setTransactionSuccessful() } finally { - db.endTransaction() + if (db.inTransaction()) { + db.endTransaction() + } // We have to re-begin the transaction for the calling code (see comment at start of method) db.beginTransaction() diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SqlCipherErrorHandler.kt b/app/src/main/java/org/thoughtcrime/securesms/database/SqlCipherErrorHandler.kt index 8d15d0cd0c..890ddb897a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SqlCipherErrorHandler.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SqlCipherErrorHandler.kt @@ -29,6 +29,12 @@ class SqlCipherErrorHandler(private val databaseName: String) : DatabaseErrorHan if (result is DiagnosticResults.Success) { if (result.pragma1Passes && result.pragma2Passes) { + var endCount = 0 + while (db.inTransaction() && endCount < 10) { + db.endTransaction() + endCount++ + } + attemptToClearFullTextSearchIndex() throw DatabaseCorruptedError_BothChecksPass(lines) } else if (!result.pragma1Passes && result.pragma2Passes) {