mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: make ncgocall a global counter
ncgocall was stored per M, runtime.NumCgoCall lost the counter when a M die.
Fixes #46789
Change-Id: I85831fbb2713f4c30d1800d07e1f47aa0031970e
GitHub-Last-Rev: cbc15fa870
GitHub-Pull-Request: golang/go#46842
Reviewed-on: https://go-review.googlesource.com/c/go/+/329729
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Alexander Rakoczy <alex@golang.org>
This commit is contained in:
parent
37f9a8f69d
commit
d01bc571f7
3 changed files with 5 additions and 1 deletions
|
|
@ -110,6 +110,8 @@ func syscall_cgocaller(fn unsafe.Pointer, args ...uintptr) uintptr {
|
||||||
return as.retval
|
return as.retval
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var ncgocall uint64 // number of cgo calls in total for dead m
|
||||||
|
|
||||||
// Call from Go to C.
|
// Call from Go to C.
|
||||||
//
|
//
|
||||||
// This must be nosplit because it's used for syscalls on some
|
// This must be nosplit because it's used for syscalls on some
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ func NumCPU() int {
|
||||||
|
|
||||||
// NumCgoCall returns the number of cgo calls made by the current process.
|
// NumCgoCall returns the number of cgo calls made by the current process.
|
||||||
func NumCgoCall() int64 {
|
func NumCgoCall() int64 {
|
||||||
var n int64
|
var n = int64(atomic.Load64(&ncgocall))
|
||||||
for mp := (*m)(atomic.Loadp(unsafe.Pointer(&allm))); mp != nil; mp = mp.alllink {
|
for mp := (*m)(atomic.Loadp(unsafe.Pointer(&allm))); mp != nil; mp = mp.alllink {
|
||||||
n += int64(mp.ncgocall)
|
n += int64(mp.ncgocall)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1522,6 +1522,8 @@ found:
|
||||||
}
|
}
|
||||||
unlock(&sched.lock)
|
unlock(&sched.lock)
|
||||||
|
|
||||||
|
atomic.Xadd64(&ncgocall, int64(m.ncgocall))
|
||||||
|
|
||||||
// Release the P.
|
// Release the P.
|
||||||
handoffp(releasep())
|
handoffp(releasep())
|
||||||
// After this point we must not have write barriers.
|
// After this point we must not have write barriers.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue