}
p1 := procresize(procs)
sched.gcwaiting.Store(false)
- if sched.sysmonwait != 0 {
- sched.sysmonwait = 0
+ if sched.sysmonwait.Load() {
+ sched.sysmonwait.Store(false)
notewakeup(&sched.sysmonnote)
}
unlock(&sched.lock)
save(pc, sp)
}
- if atomic.Load(&sched.sysmonwait) != 0 {
+ if sched.sysmonwait.Load() {
systemstack(entersyscall_sysmon)
save(pc, sp)
}
func entersyscall_sysmon() {
lock(&sched.lock)
- if atomic.Load(&sched.sysmonwait) != 0 {
- atomic.Store(&sched.sysmonwait, 0)
+ if sched.sysmonwait.Load() {
+ sched.sysmonwait.Store(false)
notewakeup(&sched.sysmonnote)
}
unlock(&sched.lock)
func exitsyscallfast_pidle() bool {
lock(&sched.lock)
pp, _ := pidleget(0)
- if pp != nil && atomic.Load(&sched.sysmonwait) != 0 {
- atomic.Store(&sched.sysmonwait, 0)
+ if pp != nil && sched.sysmonwait.Load() {
+ sched.sysmonwait.Store(false)
notewakeup(&sched.sysmonnote)
}
unlock(&sched.lock)
// could race with another M transitioning gp from unlocked to
// locked.
locked = gp.lockedm != 0
- } else if atomic.Load(&sched.sysmonwait) != 0 {
- atomic.Store(&sched.sysmonwait, 0)
+ } else if sched.sysmonwait.Load() {
+ sched.sysmonwait.Store(false)
notewakeup(&sched.sysmonnote)
}
unlock(&sched.lock)
syscallWake := false
next := timeSleepUntil()
if next > now {
- atomic.Store(&sched.sysmonwait, 1)
+ sched.sysmonwait.Store(true)
unlock(&sched.lock)
// Make wake-up period small enough
// for the sampling to be correct.
osRelax(false)
}
lock(&sched.lock)
- atomic.Store(&sched.sysmonwait, 0)
+ sched.sysmonwait.Store(false)
noteclear(&sched.sysmonnote)
}
if syscallWake {
lock(&sched.lock)
print("SCHED ", (now-starttime)/1e6, "ms: gomaxprocs=", gomaxprocs, " idleprocs=", sched.npidle.Load(), " threads=", mcount(), " spinningthreads=", sched.nmspinning.Load(), " idlethreads=", sched.nmidle, " runqueue=", sched.runqsize)
if detailed {
- print(" gcwaiting=", sched.gcwaiting.Load(), " nmidlelocked=", sched.nmidlelocked, " stopwait=", sched.stopwait, " sysmonwait=", sched.sysmonwait, "\n")
+ print(" gcwaiting=", sched.gcwaiting.Load(), " nmidlelocked=", sched.nmidlelocked, " stopwait=", sched.stopwait, " sysmonwait=", sched.sysmonwait.Load(), "\n")
}
// We must be careful while reading data from P's, M's and G's.
// Even if we hold schedlock, most data can be changed concurrently.