mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-08 13:03:39 +00:00
runtime: implement timers for Go 1.23
There were a number of changes in time.Timer/time.Ticker that need a separate implementation for Go 1.22 and Go 1.23.
This commit is contained in:
committed by
Ron Evans
parent
db2a06a9bb
commit
e865db232b
+3
-27
@@ -4,7 +4,7 @@ package runtime
|
||||
type timerNode struct {
|
||||
next *timerNode
|
||||
timer *timer
|
||||
callback func(*timerNode)
|
||||
callback func(node *timerNode, delta int64)
|
||||
}
|
||||
|
||||
// whenTicks returns the (absolute) time when this timer should trigger next.
|
||||
@@ -12,17 +12,6 @@ func (t *timerNode) whenTicks() timeUnit {
|
||||
return nanosecondsToTicks(t.timer.when)
|
||||
}
|
||||
|
||||
// Defined in the time package, implemented here in the runtime.
|
||||
//
|
||||
//go:linkname startTimer time.startTimer
|
||||
func startTimer(tim *timer) {
|
||||
addTimer(&timerNode{
|
||||
timer: tim,
|
||||
callback: timerCallback,
|
||||
})
|
||||
scheduleLog("adding timer")
|
||||
}
|
||||
|
||||
// timerCallback is called when a timer expires. It makes sure to call the
|
||||
// callback in the time package and to re-add the timer to the queue if this is
|
||||
// a ticker (repeating timer).
|
||||
@@ -32,11 +21,11 @@ func startTimer(tim *timer) {
|
||||
// dependency causes timerQueue not to get optimized away.
|
||||
// If timerQueue doesn't get optimized away, small programs (that don't call
|
||||
// time.NewTimer etc) would still pay the cost of these timers.
|
||||
func timerCallback(tn *timerNode) {
|
||||
func timerCallback(tn *timerNode, delta int64) {
|
||||
// Run timer function (implemented in the time package).
|
||||
// The seq parameter to the f function is not used in the time
|
||||
// package so is left zero.
|
||||
tn.timer.f(tn.timer.arg, 0)
|
||||
tn.timer.callCallback(delta)
|
||||
|
||||
// If this is a periodic timer (a ticker), re-add it to the queue.
|
||||
if tn.timer.period != 0 {
|
||||
@@ -44,16 +33,3 @@ func timerCallback(tn *timerNode) {
|
||||
addTimer(tn)
|
||||
}
|
||||
}
|
||||
|
||||
//go:linkname stopTimer time.stopTimer
|
||||
func stopTimer(tim *timer) bool {
|
||||
return removeTimer(tim)
|
||||
}
|
||||
|
||||
//go:linkname resetTimer time.resetTimer
|
||||
func resetTimer(tim *timer, when int64) bool {
|
||||
tim.when = when
|
||||
removed := removeTimer(tim)
|
||||
startTimer(tim)
|
||||
return removed
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user