// Mark runnable.
_g_ := getg()
- _g_.m.locks++ // disable preemption because it can be holding p in a local var
+ mp := acquirem() // disable preemption because it can be holding p in a local var
if status&^_Gscan != _Gwaiting {
dumpgstatus(gp)
throw("bad g->status in ready")
if atomic.Load(&sched.npidle) != 0 && atomic.Load(&sched.nmspinning) == 0 {
wakep()
}
- _g_.m.locks--
- if _g_.m.locks == 0 && _g_.preempt { // restore the preemption request in Case we've cleared it in newstack
- _g_.stackguard0 = stackPreempt
- }
+ releasem(mp)
}
// freezeStopWait is a large value that freezetheworld sets
}
func startTheWorldWithSema(emitTraceEvent bool) int64 {
- _g_ := getg()
-
- _g_.m.locks++ // disable preemption because it can be holding p in a local var
+ mp := acquirem() // disable preemption because it can be holding p in a local var
if netpollinited() {
list := netpoll(false) // non-blocking
injectglist(&list)
wakep()
}
- _g_.m.locks--
- if _g_.m.locks == 0 && _g_.preempt { // restore the preemption request in case we've cleared it in newstack
- _g_.stackguard0 = stackPreempt
- }
+ releasem(mp)
return startTime
}
//go:yeswritebarrierrec
func allocm(_p_ *p, fn func()) *m {
_g_ := getg()
- _g_.m.locks++ // disable GC because it can be called from sysmon
+ acquirem() // disable GC because it can be called from sysmon
if _g_.m.p == 0 {
acquirep(_p_) // temporarily borrow p for mallocs in this function
}
if _p_ == _g_.m.p.ptr() {
releasep()
}
- _g_.m.locks--
- if _g_.m.locks == 0 && _g_.preempt { // restore the preemption request in case we've cleared it in newstack
- _g_.stackguard0 = stackPreempt
- }
+ releasem(_g_.m)
return mp
}
_g_.m.throwing = -1 // do not dump full stacks
throw("go of nil func value")
}
- _g_.m.locks++ // disable preemption because it can be holding p in a local var
+ acquirem() // disable preemption because it can be holding p in a local var
siz := narg
siz = (siz + 7) &^ 7
if atomic.Load(&sched.npidle) != 0 && atomic.Load(&sched.nmspinning) == 0 && mainStarted {
wakep()
}
- _g_.m.locks--
- if _g_.m.locks == 0 && _g_.preempt { // restore the preemption request in case we've cleared it in newstack
- _g_.stackguard0 = stackPreempt
- }
+ releasem(_g_.m)
}
// saveAncestors copies previous ancestors of the given caller g and