diff options
author | Nishith Khanna <nishithkhanna@e.email> | 2022-06-17 06:28:57 +0000 |
---|---|---|
committer | Nishith Khanna <nishithkhanna@e.email> | 2022-06-17 06:28:57 +0000 |
commit | 3ba0f13566547085290638634dbb1b76d57353d0 (patch) | |
tree | cc2a988dcb615b112fde445a91c8ccd9049d5777 | |
parent | d1ecf6f0f594f6e4d1fa36037ae3eff02c76b279 (diff) | |
parent | d3c76d20e4a79d44947404a7bb411a8f5c496256 (diff) |
Merge branch '5626-main-tracker_race_condition' into 'main'
advanced-privacy: run everything in same scope to prevent race conditions
See merge request e/os/advanced-privacy!70
-rw-r--r-- | flow-mvi/src/main/java/foundation/e/flowmvi/feature/BaseFeature.kt | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/flow-mvi/src/main/java/foundation/e/flowmvi/feature/BaseFeature.kt b/flow-mvi/src/main/java/foundation/e/flowmvi/feature/BaseFeature.kt index 068cd8e..e3dd257 100644 --- a/flow-mvi/src/main/java/foundation/e/flowmvi/feature/BaseFeature.kt +++ b/flow-mvi/src/main/java/foundation/e/flowmvi/feature/BaseFeature.kt @@ -24,6 +24,7 @@ import foundation.e.flowmvi.Reducer import foundation.e.flowmvi.SingleEventProducer import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow @@ -104,11 +105,12 @@ open class BaseFeature<State : Any, in Action : Any, in Effect : Any, SingleEven } private suspend fun Flow<Action>.collectIntoHandler( - callerCoroutineScope: CoroutineScope, + @Suppress("UNUSED_PARAMETER")callerCoroutineScope: CoroutineScope, @Suppress("UNUSED_PARAMETER") logger: Logger ) { + val scope = CoroutineScope(Dispatchers.IO + Job()) onEach { action -> - callerCoroutineScope.launch(Dispatchers.IO) { + scope.launch { actor.invoke(_state.value, action) .onEach { effect -> mutex.withLock { @@ -123,9 +125,9 @@ open class BaseFeature<State : Any, in Action : Any, in Effect : Any, SingleEven } } } - .launchIn(coroutineScope) + .launchIn(scope) } } - .launchIn(callerCoroutineScope) + .launchIn(scope) } } |