diff options
| author | Fabian Mastenbroek <fabianishere@outlook.com> | 2018-07-17 16:20:47 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-07-17 16:20:47 +0200 |
| commit | 28974348022dc7c339359ffb099ec55d2c76e457 (patch) | |
| tree | a5b6c16f28dc803f3a2e6269b79e98c4e4881a96 /opendc-kernel-omega/src/main | |
| parent | ebd8c8ee83704605241edf08c22df3562f52e689 (diff) | |
bug: Fix crashed processes from being resumed (#28)
This change fixes a bug where a process would be resumed again after it
had crashed, bringing down the kernel.
Fixes #27
Diffstat (limited to 'opendc-kernel-omega/src/main')
| -rw-r--r-- | opendc-kernel-omega/src/main/kotlin/com/atlarge/opendc/omega/OmegaSimulation.kt | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/opendc-kernel-omega/src/main/kotlin/com/atlarge/opendc/omega/OmegaSimulation.kt b/opendc-kernel-omega/src/main/kotlin/com/atlarge/opendc/omega/OmegaSimulation.kt index 4e3aa16c..fbb4a270 100644 --- a/opendc-kernel-omega/src/main/kotlin/com/atlarge/opendc/omega/OmegaSimulation.kt +++ b/opendc-kernel-omega/src/main/kotlin/com/atlarge/opendc/omega/OmegaSimulation.kt @@ -184,11 +184,15 @@ internal class OmegaSimulation<M>(bootstrap: Bootstrap<M>) : Simulation<M>, Boot } val context = envelope.destination.context ?: continue + val continuation = context.continuation ?: continue - if (envelope.message !is Interrupt) { - context.continuation.resume(envelope) + // Clear the continuation to prevent resuming an already resumed continuation + context.continuation = null + + if (envelope.message is Interrupt) { + continuation.resumeWithException(envelope.message) } else { - context.continuation.resumeWithException(envelope.message) + continuation.resume(envelope) } context.last = time @@ -335,7 +339,7 @@ internal class OmegaSimulation<M>(bootstrap: Bootstrap<M>) : Simulation<M>, Boot /** * The continuation to resume the execution of the process. */ - lateinit var continuation: Continuation<Envelope> + var continuation: Continuation<Envelope>? = null /** * The last point in time the process has done some work. |
