diff options
Diffstat (limited to 'src/runtime/proc.go')
| -rw-r--r-- | src/runtime/proc.go | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/runtime/proc.go b/src/runtime/proc.go index 23429fd774..d80b33e9c4 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -2162,6 +2162,9 @@ func goexit0(gp *g) { _g_ := getg() casgstatus(gp, _Grunning, _Gdead) + if isSystemGoroutine(gp) { + atomic.Xadd(&sched.ngsys, -1) + } gp.m = nil gp.lockedm = nil _g_.m.lockedg = nil @@ -2693,6 +2696,9 @@ func newproc1(fn *funcval, argp *uint8, narg int32, nret int32, callerpc uintptr gostartcallfn(&newg.sched, fn) newg.gopc = callerpc newg.startpc = fn.fn + if isSystemGoroutine(newg) { + atomic.Xadd(&sched.ngsys, +1) + } casgstatus(newg, _Gdead, _Grunnable) if _p_.goidcache == _p_.goidcacheend { @@ -2885,7 +2891,7 @@ func badunlockosthread() { } func gcount() int32 { - n := int32(allglen) - sched.ngfree + n := int32(allglen) - sched.ngfree - int32(atomic.Load(&sched.ngsys)) for i := 0; ; i++ { _p_ := allp[i] if _p_ == nil { |
