diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStore.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStore.kt index 80d00c3dde..ffa090b76a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStore.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStore.kt @@ -286,12 +286,17 @@ internal class RealmCryptoStore @Inject constructor( val userEntity = UserEntity.getOrCreate(realm, userId) // First delete the removed devices val deviceIds = devices.keys + val devicesToDelete = ArrayList() userEntity.devices.iterator().forEach { deviceInfoEntity -> if (deviceInfoEntity.deviceId !in deviceIds) { Timber.d("Remove device ${deviceInfoEntity.deviceId} of user $userId") - deviceInfoEntity.deleteOnCascade() + devicesToDelete.add(deviceInfoEntity) } } + while (devicesToDelete.isNotEmpty()) { + val device = devicesToDelete.removeAt(0) + device.deleteOnCascade() + } // Then update existing devices or add new one devices.values.forEach { cryptoDeviceInfo -> val existingDeviceInfoEntity = userEntity.devices.firstOrNull { it.deviceId == cryptoDeviceInfo.deviceId }