diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/Helper.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/Helper.kt index 4ba484ae1a..b1e1cb4426 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/Helper.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/Helper.kt @@ -32,41 +32,38 @@ import java.util.zip.GZIPInputStream * Get realm, invoke the action, close realm, and return the result of the action */ fun doWithRealm(realmConfiguration: RealmConfiguration, action: (Realm) -> T): T { - val realm = Realm.getInstance(realmConfiguration) - val result = action.invoke(realm) - realm.close() - return result + return Realm.getInstance(realmConfiguration).use { realm -> + action.invoke(realm) + } } /** * Get realm, do the query, copy from realm, close realm, and return the copied result */ fun doRealmQueryAndCopy(realmConfiguration: RealmConfiguration, action: (Realm) -> T?): T? { - val realm = Realm.getInstance(realmConfiguration) - val result = action.invoke(realm) - val copiedResult = result?.let { realm.copyFromRealm(result) } - realm.close() - return copiedResult + return Realm.getInstance(realmConfiguration).use { realm -> + val result = action.invoke(realm) + result?.let { realm.copyFromRealm(result) } + } } /** * Get realm, do the list query, copy from realm, close realm, and return the copied result */ fun doRealmQueryAndCopyList(realmConfiguration: RealmConfiguration, action: (Realm) -> Iterable): Iterable { - val realm = Realm.getInstance(realmConfiguration) - val result = action.invoke(realm) - val copiedResult = realm.copyFromRealm(result) - realm.close() - return copiedResult + return Realm.getInstance(realmConfiguration).use { realm -> + val result = action.invoke(realm) + return realm.copyFromRealm(result) + } } /** * Get realm instance, invoke the action in a transaction and close realm */ fun doRealmTransaction(realmConfiguration: RealmConfiguration, action: (Realm) -> Unit) { - val realm = Realm.getInstance(realmConfiguration) - realm.executeTransaction { action.invoke(it) } - realm.close() + Realm.getInstance(realmConfiguration).use { realm -> + realm.executeTransaction { action.invoke(realm) } + } } /** diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/RealmCryptoStore.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/RealmCryptoStore.kt index 9865614c9f..87e8b55b50 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/RealmCryptoStore.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/RealmCryptoStore.kt @@ -360,7 +360,7 @@ internal class RealmCryptoStore(private val realmConfiguration: RealmConfigurati return } - doRealmTransaction(realmConfiguration) { + doRealmTransaction(realmConfiguration) { realm -> sessions.forEach { session -> var sessionIdentifier: String? = null @@ -387,7 +387,7 @@ internal class RealmCryptoStore(private val realmConfiguration: RealmConfigurati putInboundGroupSession(session) } - it.insertOrUpdate(realmOlmInboundGroupSession) + realm.insertOrUpdate(realmOlmInboundGroupSession) } } }