Skip to content

Commit 651b18d

Browse files
committed
runtime: implement resetTimer
1 parent aa13b5d commit 651b18d

File tree

3 files changed

+25
-0
lines changed

3 files changed

+25
-0
lines changed

src/runtime/time.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ func (t *timerNode) whenTicks() timeUnit {
1313
}
1414

1515
// Defined in the time package, implemented here in the runtime.
16+
//
1617
//go:linkname startTimer time.startTimer
1718
func startTimer(tim *timer) {
1819
addTimer(&timerNode{
@@ -48,3 +49,11 @@ func timerCallback(tn *timerNode) {
4849
func stopTimer(tim *timer) bool {
4950
return removeTimer(tim)
5051
}
52+
53+
//go:linkname resetTimer time.resetTimer
54+
func resetTimer(tim *timer, when int64) bool {
55+
tim.when = when
56+
removed := removeTimer(tim)
57+
startTimer(tim)
58+
return removed
59+
}

testdata/timers.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,16 @@ func main() {
3737
}()
3838
<-timer.C
3939
println("waited on timer at 250ms")
40+
reset := timer.Reset(time.Millisecond * 250)
41+
println("timer reset:", reset)
42+
println("waiting on timer")
43+
go func() {
44+
time.Sleep(time.Millisecond * 125)
45+
println(" - after 125ms")
46+
time.Sleep(time.Millisecond * 250)
47+
println(" - after 250ms")
48+
}()
49+
<-timer.C
50+
println("waited on timer at 250ms")
4051
time.Sleep(time.Millisecond * 250)
4152
}

testdata/timers.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,8 @@ waiting on timer
99
- after 125ms
1010
waited on timer at 250ms
1111
- after 250ms
12+
timer reset: true
13+
waiting on timer
14+
- after 125ms
15+
waited on timer at 250ms
16+
- after 250ms

0 commit comments

Comments
 (0)