diff options
| -rw-r--r-- | simulator/buildSrc/src/main/kotlin/library.kt | 2 | ||||
| -rw-r--r-- | simulator/opendc-simulator/opendc-simulator-compute/src/main/kotlin/org/opendc/simulator/compute/SimBareMetalMachine.kt | 10 |
2 files changed, 8 insertions, 4 deletions
diff --git a/simulator/buildSrc/src/main/kotlin/library.kt b/simulator/buildSrc/src/main/kotlin/library.kt index af278a07..6735c110 100644 --- a/simulator/buildSrc/src/main/kotlin/library.kt +++ b/simulator/buildSrc/src/main/kotlin/library.kt @@ -45,5 +45,5 @@ object Library { /** * Kotlin coroutines support */ - val KOTLINX_COROUTINES = "1.3.9" + val KOTLINX_COROUTINES = "1.4.2" } diff --git a/simulator/opendc-simulator/opendc-simulator-compute/src/main/kotlin/org/opendc/simulator/compute/SimBareMetalMachine.kt b/simulator/opendc-simulator/opendc-simulator-compute/src/main/kotlin/org/opendc/simulator/compute/SimBareMetalMachine.kt index c6d5bdd1..4340708f 100644 --- a/simulator/opendc-simulator/opendc-simulator-compute/src/main/kotlin/org/opendc/simulator/compute/SimBareMetalMachine.kt +++ b/simulator/opendc-simulator/opendc-simulator-compute/src/main/kotlin/org/opendc/simulator/compute/SimBareMetalMachine.kt @@ -95,6 +95,8 @@ public class SimBareMetalMachine( return object : SelectClause0 { @InternalCoroutinesApi override fun <R> registerSelectClause0(select: SelectInstance<R>, block: suspend () -> R) { + val context = select.completion.context + // Do not reset the usage state: we will set it ourselves usageFlush?.dispose() usageFlush = null @@ -139,7 +141,7 @@ public class SimBareMetalMachine( } // Schedule the flush after the entire slice has finished - currentDisposable = delay.invokeOnTimeout(duration, action) + currentDisposable = delay.invokeOnTimeout(duration, action, context) // Start the slice work currentWork = work @@ -158,11 +160,13 @@ public class SimBareMetalMachine( currentWork?.stop(duration) currentDisposable?.dispose() - // Schedule reset the usage of the machine since the call is returning - usageFlush = delay.invokeOnTimeout(1) { + val action = { usageState.value = 0.0 usageFlush = null } + + // Schedule reset the usage of the machine since the call is returning + usageFlush = delay.invokeOnTimeout(1, action, context) } select.disposeOnSelect(disposable) |
