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:
parent
03e1870b63
commit
c82bbc0e8e
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user