diff --git a/changelog.d/6392.misc b/changelog.d/6392.misc
new file mode 100644
index 0000000000..c7b95917c3
--- /dev/null
+++ b/changelog.d/6392.misc
@@ -0,0 +1 @@
+Ensure `RealmList<T>.clearWith()` extension is correctly used.
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/RealmExtensions.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/RealmExtensions.kt
index 00cbe0aa85..c6ea2bc7bd 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/RealmExtensions.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/RealmExtensions.kt
@@ -20,6 +20,7 @@ import io.realm.RealmList
 import io.realm.RealmObject
 import io.realm.RealmObjectSchema
 import org.matrix.android.sdk.internal.database.model.HomeServerCapabilitiesEntityFields
+import org.matrix.android.sdk.internal.util.fatalError
 
 internal fun RealmObject.assertIsManaged() {
     check(isManaged) { "${javaClass.simpleName} entity should be managed to use this function" }
@@ -27,10 +28,19 @@ internal fun RealmObject.assertIsManaged() {
 
 /**
  * Clear a RealmList by deleting all its items calling the provided lambda.
+ * The lambda is supposed to delete the item, which means that after this operation, the list will be empty.
  */
 internal fun <T> RealmList<T>.clearWith(delete: (T) -> Unit) {
-    while (!isEmpty()) {
-        first()?.let { delete.invoke(it) }
+    map { item ->
+        // Create a lambda for all items of the list
+        { delete(item) }
+    }.forEach { lambda ->
+        // Then invoke all the lambda
+        lambda.invoke()
+    }
+
+    if (isNotEmpty()) {
+        fatalError("`clearWith` MUST delete all elements of the RealmList")
     }
 }
 
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/fatal.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/fatal.kt
new file mode 100644
index 0000000000..323eee0b1c
--- /dev/null
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/fatal.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2022 The Matrix.org Foundation C.I.C.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.matrix.android.sdk.internal.util
+
+import org.matrix.android.sdk.BuildConfig
+import timber.log.Timber
+
+/**
+ * Throws in debug, only log in production.
+ * As this method does not always throw, next statement should be a return.
+*/
+internal fun fatalError(message: String) {
+    if (BuildConfig.DEBUG) {
+        error(message)
+    } else {
+        Timber.e(message)
+    }
+}