Make sure the live timeline is destroyed before clearing a room's cache (#4515)

* Make sure the live timeline is destroyed before clearing a room's cache

According to the SDK team, having a live timeline could lead to DB issues.

* Try to destroy all room and list item references when the `RustRoomFactory` is destroyed

It may also have some effect on DB corruption issues we've seen
This commit is contained in:
Jorge Martin Espinosa 2025-04-02 12:58:40 +02:00 committed by GitHub
parent d7ca529db1
commit b2791d5aad
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 6 additions and 0 deletions

View file

@ -311,6 +311,8 @@ class RoomListPresenter @Inject constructor(
private fun CoroutineScope.clearCacheOfRoom(roomId: RoomId) = launch {
client.getRoom(roomId)?.use { room ->
// Ideally we wouldn't have a live timeline at this point, but right now we instantiate one when retrieving the room
room.liveTimeline.close()
room.clearEventCacheStorage()
}
}

View file

@ -81,6 +81,10 @@ class RustRoomFactory(
withContext(NonCancellable + dispatcher) {
mutex.withLock {
Timber.d("Destroying room factory")
cache.snapshot().values.forEach { (listItem, innerRoom) ->
innerRoom.destroy()
listItem.destroy()
}
cache.evictAll()
isDestroyed = true
}