Use ConcurrentHashMap to manage synchronization.

This commit is contained in:
Benoit Marty
2023-07-24 21:53:19 +02:00
parent 754b4647ee
commit da9f52129f

View File

@@ -26,6 +26,7 @@ import io.element.android.libraries.pushstore.api.UserPushStore
import io.element.android.libraries.pushstore.api.UserPushStoreFactory
import io.element.android.libraries.sessionstorage.api.observer.SessionListener
import io.element.android.libraries.sessionstorage.api.observer.SessionObserver
import java.util.concurrent.ConcurrentHashMap
import javax.inject.Inject
@SingleIn(AppScope::class)
@@ -39,15 +40,13 @@ class DefaultUserPushStoreFactory @Inject constructor(
}
// We can have only one class accessing a single data store, so keep a cache of them.
private val cache = mutableMapOf<SessionId, UserPushStore>()
private val cache = ConcurrentHashMap<SessionId, UserPushStore>()
override fun create(userId: SessionId): UserPushStore {
return synchronized(cache) {
cache.getOrPut(userId) {
UserPushStoreDataStore(
context = context,
userId = userId
)
}
return cache.getOrPut(userId) {
UserPushStoreDataStore(
context = context,
userId = userId
)
}
}