Use ConcurrentHashMap to manage synchronization.

This commit is contained in:
Benoit Marty 2023-07-24 21:53:19 +02:00
parent a2975ec094
commit a6c96af731

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
)
}
}