Skip to content

Commit

Permalink
feat: cleanup sleep timers
Browse files Browse the repository at this point in the history
  • Loading branch information
heypoom committed Apr 8, 2024
1 parent ae85f23 commit 3c88d16
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 1 deletion.
5 changes: 5 additions & 0 deletions canvas/src/engine/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import setup, {

import { isBlock as is, isBlock } from "@/blocks"
import { midiManager } from "@/services/midi"
import { sleepTimers } from "@/services/sleep"
import { syncBlockData, updateNodeData } from "@/store/blocks"
import { $clock } from "@/store/clock"
import { $nodes } from "@/store/nodes"
Expand Down Expand Up @@ -185,6 +186,10 @@ export class CanvasEngine {
// Reset the watchdog.
this.ctx.set_await_watchdog(true)

// Reset pending sleep timers.
sleepTimers.forEach(clearInterval)
sleepTimers.clear()

// Report if our program did not halt properly.
if (!this.continuous) this.reportHang()
}
Expand Down
9 changes: 8 additions & 1 deletion canvas/src/services/sleep.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,15 @@ import { Effect } from "machine-wasm"

import { engine } from "@/engine"

export const sleepTimers = new Set<number>()

export function processSleepEffect(id: number, effect: Effect) {
if (effect.type !== "Sleep") return

setTimeout(() => engine.ctx.wake(id), effect.ms)
const timer = setTimeout(() => {
engine.ctx.wake(id)
sleepTimers.delete(timer)
}, effect.ms)

sleepTimers.add(timer)
}
1 change: 1 addition & 0 deletions machine/src/machine/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ impl Machine {
self.mem.reset_stacks();
self.expected_receives = 0;
self.sleeping = false;
self.remaining_sleep_ticks = 0;
}
}

Expand Down
1 change: 1 addition & 0 deletions machine/src/sequencer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@ impl Sequencer {
// Reset the machine's sleeping flag.
if let Some(machine) = self.get_mut(machine_id) {
machine.sleeping = false;
machine.remaining_sleep_ticks = 0;
}
}

Expand Down

0 comments on commit 3c88d16

Please # to comment.