summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNishith Khanna <nishithkhanna@e.email>2022-06-17 06:28:57 +0000
committerNishith Khanna <nishithkhanna@e.email>2022-06-17 06:28:57 +0000
commit3ba0f13566547085290638634dbb1b76d57353d0 (patch)
treecc2a988dcb615b112fde445a91c8ccd9049d5777
parentd1ecf6f0f594f6e4d1fa36037ae3eff02c76b279 (diff)
parentd3c76d20e4a79d44947404a7bb411a8f5c496256 (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.kt10
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)
}
}