1
0
mirror of https://github.com/golang/go synced 2024-11-26 20:31:25 -07:00

runtime: convert timer0When/timerModifiedEarliest to atomic.Int64

So they match with when/nextwhen fields of timer struct.

Updates #53821

Change-Id: Iad0cceb129796745774facfbbfe5756df3a320b4
Reviewed-on: https://go-review.googlesource.com/c/go/+/423117
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com>
This commit is contained in:
Cuong Manh Le 2022-08-18 00:21:36 +07:00 committed by Gopher Robot
parent 03e1870b63
commit c82bbc0e8e
3 changed files with 12 additions and 12 deletions

View File

@ -3329,8 +3329,8 @@ func dropg() {
func checkTimers(pp *p, now int64) (rnow, pollUntil int64, ran bool) { func checkTimers(pp *p, now int64) (rnow, pollUntil int64, ran bool) {
// If it's not yet time for the first timer, or the first adjusted // If it's not yet time for the first timer, or the first adjusted
// timer, then there is nothing to do. // timer, then there is nothing to do.
next := int64(pp.timer0When.Load()) next := pp.timer0When.Load()
nextAdj := int64(pp.timerModifiedEarliest.Load()) nextAdj := pp.timerModifiedEarliest.Load()
if next == 0 || (nextAdj != 0 && nextAdj < next) { if next == 0 || (nextAdj != 0 && nextAdj < next) {
next = nextAdj next = nextAdj
} }

View File

@ -671,13 +671,13 @@ type p struct {
// The when field of the first entry on the timer heap. // The when field of the first entry on the timer heap.
// This is 0 if the timer heap is empty. // This is 0 if the timer heap is empty.
timer0When atomic.Uint64 timer0When atomic.Int64
// The earliest known nextwhen field of a timer with // The earliest known nextwhen field of a timer with
// timerModifiedEarlier status. Because the timer may have been // timerModifiedEarlier status. Because the timer may have been
// modified again, there need not be any timer with this value. // modified again, there need not be any timer with this value.
// This is 0 if there are no timerModifiedEarlier timers. // This is 0 if there are no timerModifiedEarlier timers.
timerModifiedEarliest atomic.Uint64 timerModifiedEarliest atomic.Int64
// Per-P GC state // Per-P GC state
gcAssistTime int64 // Nanoseconds in assistAlloc gcAssistTime int64 // Nanoseconds in assistAlloc

View File

@ -301,7 +301,7 @@ func doaddtimer(pp *p, t *timer) {
pp.timers = append(pp.timers, t) pp.timers = append(pp.timers, t)
siftupTimer(pp.timers, i) siftupTimer(pp.timers, i)
if t == pp.timers[0] { if t == pp.timers[0] {
pp.timer0When.Store(uint64(t.when)) pp.timer0When.Store(t.when)
} }
atomic.Xadd(&pp.numTimers, 1) atomic.Xadd(&pp.numTimers, 1)
} }
@ -672,7 +672,7 @@ func adjusttimers(pp *p, now int64) {
// We'll postpone looking through all the adjusted timers until // We'll postpone looking through all the adjusted timers until
// one would actually expire. // one would actually expire.
first := pp.timerModifiedEarliest.Load() first := pp.timerModifiedEarliest.Load()
if first == 0 || int64(first) > now { if first == 0 || first > now {
if verifyTimers { if verifyTimers {
verifyTimerHeap(pp) verifyTimerHeap(pp)
} }
@ -754,8 +754,8 @@ func addAdjustedTimers(pp *p, moved []*timer) {
// //
//go:nowritebarrierrec //go:nowritebarrierrec
func nobarrierWakeTime(pp *p) int64 { func nobarrierWakeTime(pp *p) int64 {
next := int64(pp.timer0When.Load()) next := pp.timer0When.Load()
nextAdj := int64(pp.timerModifiedEarliest.Load()) nextAdj := pp.timerModifiedEarliest.Load()
if next == 0 || (nextAdj != 0 && nextAdj < next) { if next == 0 || (nextAdj != 0 && nextAdj < next) {
next = nextAdj next = nextAdj
} }
@ -1005,7 +1005,7 @@ func updateTimer0When(pp *p) {
if len(pp.timers) == 0 { if len(pp.timers) == 0 {
pp.timer0When.Store(0) pp.timer0When.Store(0)
} else { } else {
pp.timer0When.Store(uint64(pp.timers[0].when)) pp.timer0When.Store(pp.timers[0].when)
} }
} }
@ -1019,7 +1019,7 @@ func updateTimerModifiedEarliest(pp *p, nextwhen int64) {
return return
} }
if pp.timerModifiedEarliest.CompareAndSwap(old, uint64(nextwhen)) { if pp.timerModifiedEarliest.CompareAndSwap(old, nextwhen) {
return return
} }
} }
@ -1040,12 +1040,12 @@ func timeSleepUntil() int64 {
continue continue
} }
w := int64(pp.timer0When.Load()) w := pp.timer0When.Load()
if w != 0 && w < next { if w != 0 && w < next {
next = w next = w
} }
w = int64(pp.timerModifiedEarliest.Load()) w = pp.timerModifiedEarliest.Load()
if w != 0 && w < next { if w != 0 && w < next {
next = w next = w
} }