mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-07-26 06:38:42 +00:00
944176beef
Ticker.Stop does not drain already-buffered ticks from the channel, so on slow CI runners a tick may already be queued before Stop takes effect, causing a spurious "fail: ticker should have stopped!" failure. Drain the channel immediately after Stop before checking that no new ticks arrive. Signed-off-by: deadprogram <ron@hybridgroup.com>
62 lines
1.4 KiB
Go
62 lines
1.4 KiB
Go
package main
|
|
|
|
import "time"
|
|
|
|
var timer = time.NewTimer(time.Millisecond)
|
|
|
|
func main() {
|
|
// Test ticker.
|
|
ticker := time.NewTicker(time.Millisecond * 500)
|
|
println("waiting on ticker")
|
|
go func() {
|
|
time.Sleep(time.Millisecond * 150)
|
|
println(" - after 150ms")
|
|
time.Sleep(time.Millisecond * 200)
|
|
println(" - after 200ms")
|
|
time.Sleep(time.Millisecond * 300)
|
|
println(" - after 300ms")
|
|
}()
|
|
<-ticker.C
|
|
println("waited on ticker at 500ms")
|
|
<-ticker.C
|
|
println("waited on ticker at 1000ms")
|
|
ticker.Stop()
|
|
// Drain any tick that was already queued before Stop took effect.
|
|
select {
|
|
case <-ticker.C:
|
|
default:
|
|
}
|
|
time.Sleep(time.Millisecond * 750)
|
|
select {
|
|
case <-ticker.C:
|
|
println("fail: ticker should have stopped!")
|
|
default:
|
|
println("ticker was stopped (didn't send anything after 750ms)")
|
|
}
|
|
|
|
timer := time.NewTimer(time.Millisecond * 750)
|
|
println("waiting on timer")
|
|
go func() {
|
|
time.Sleep(time.Millisecond * 200)
|
|
println(" - after 200ms")
|
|
time.Sleep(time.Millisecond * 400)
|
|
println(" - after 400ms")
|
|
}()
|
|
<-timer.C
|
|
println("waited on timer at 750ms")
|
|
time.Sleep(time.Millisecond * 500)
|
|
|
|
reset := timer.Reset(time.Millisecond * 750)
|
|
println("timer reset:", reset)
|
|
println("waiting on timer")
|
|
go func() {
|
|
time.Sleep(time.Millisecond * 200)
|
|
println(" - after 200ms")
|
|
time.Sleep(time.Millisecond * 400)
|
|
println(" - after 400ms")
|
|
}()
|
|
<-timer.C
|
|
println("waited on timer at 750ms")
|
|
time.Sleep(time.Millisecond * 500)
|
|
}
|