Skip to content

Commit

Permalink
runtime: don't call sleepTicks with a negative duration
Browse files Browse the repository at this point in the history
There are rare cases where this can happen, see for example
#4568
  • Loading branch information
aykevl committed Nov 1, 2024
1 parent 0edeaf6 commit 767ecd6
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 10 deletions.
6 changes: 3 additions & 3 deletions builder/sizes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ func TestBinarySize(t *testing.T) {
// This is a small number of very diverse targets that we want to test.
tests := []sizeTest{
// microcontrollers
{"hifive1b", "examples/echo", 4568, 280, 0, 2268},
{"microbit", "examples/serial", 2868, 388, 8, 2272},
{"wioterminal", "examples/pininterrupt", 6104, 1484, 116, 6832},
{"hifive1b", "examples/echo", 4580, 280, 0, 2268},
{"microbit", "examples/serial", 2888, 388, 8, 2272},
{"wioterminal", "examples/pininterrupt", 6124, 1484, 116, 6832},

// TODO: also check wasm. Right now this is difficult, because
// wasm binaries are run through wasm-opt and therefore the
Expand Down
16 changes: 9 additions & 7 deletions src/runtime/scheduler.go
Original file line number Diff line number Diff line change
Expand Up @@ -230,13 +230,15 @@ func scheduler(returnAtDeadlock bool) {
println("--- timer waiting:", tim, tim.whenTicks())
}
}
sleepTicks(timeLeft)
if asyncScheduler {
// The sleepTicks function above only sets a timeout at which
// point the scheduler will be called again. It does not really
// sleep. So instead of sleeping, we return and expect to be
// called again.
break
if timeLeft > 0 {
sleepTicks(timeLeft)
if asyncScheduler {
// The sleepTicks function above only sets a timeout at
// which point the scheduler will be called again. It does
// not really sleep. So instead of sleeping, we return and
// expect to be called again.
break
}
}
continue
}
Expand Down

0 comments on commit 767ecd6

Please sign in to comment.