From 720d1f433e0fed0ee48cbebdb8f995e5d5fc7405 Mon Sep 17 00:00:00 2001 From: Fabian Mastenbroek Date: Mon, 13 May 2019 20:45:49 +0200 Subject: bug: Replace initial behavior after starting coroutine This change fixes the bug where suspending immediately after launching the coroutine, without replacing the current behavior causes a failure in the BehaviorInterpreter. This is because the initial behavior was not properly set. --- odcsim-core/src/main/kotlin/com/atlarge/odcsim/internal/Coroutines.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'odcsim-core/src/main') diff --git a/odcsim-core/src/main/kotlin/com/atlarge/odcsim/internal/Coroutines.kt b/odcsim-core/src/main/kotlin/com/atlarge/odcsim/internal/Coroutines.kt index f9e8de00..82b29715 100644 --- a/odcsim-core/src/main/kotlin/com/atlarge/odcsim/internal/Coroutines.kt +++ b/odcsim-core/src/main/kotlin/com/atlarge/odcsim/internal/Coroutines.kt @@ -35,6 +35,7 @@ import com.atlarge.odcsim.Signal import com.atlarge.odcsim.coroutines.SuspendingActorContext import com.atlarge.odcsim.coroutines.SuspendingBehavior import com.atlarge.odcsim.coroutines.suspendWithBehavior +import com.atlarge.odcsim.empty import com.atlarge.odcsim.receiveMessage import com.atlarge.odcsim.receiveSignal import org.slf4j.Logger @@ -151,7 +152,8 @@ internal class SuspendingBehaviorImpl( */ internal fun start(): Behavior { val behavior = interpreter.behavior as SuspendingBehavior - val block: suspend () -> Behavior = { behavior(this) } + val block = suspend { behavior(this) } + interpreter.become(actorContext, empty()) block.startCoroutine(SuspendingBehaviorImplContinuation()) return next } -- cgit v1.2.3