summaryrefslogtreecommitdiff
path: root/flow-mvi/src/main/java/foundation/e/flowmvi
diff options
context:
space:
mode:
authorTheScarastic <warabhishek@e.email>2022-06-16 18:02:55 +0530
committerTheScarastic <warabhishek@e.email>2022-06-17 11:31:20 +0530
commitd3c76d20e4a79d44947404a7bb411a8f5c496256 (patch)
treec8064a201ef487cb8d9ae0492232a87a04e7ddad /flow-mvi/src/main/java/foundation/e/flowmvi
parent69f501bcc3fabdcc24cf65d063753ba345425996 (diff)
advanced-privacy: run everything in same scope to prevent race conditions
Diffstat (limited to 'flow-mvi/src/main/java/foundation/e/flowmvi')
-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)
}
}