mirror of https://github.com/golang/go.git
runtime: have ReadMemStats do a nil check before switching stacks
This gives the user a better stack trace experience. No need to expose them to runtime.systemstack and friends. Fixes #61158 Change-Id: I4f423f82e54b062773067c0ae64622e37cb3948b Reviewed-on: https://go-review.googlesource.com/c/go/+/507755 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Michael Knyszek <mknyszek@google.com> Run-TryBot: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com>
This commit is contained in:
parent
e4ed92a355
commit
e126572f8a
|
|
@ -347,6 +347,7 @@ func init() {
|
||||||
// which is a snapshot as of the most recently completed garbage
|
// which is a snapshot as of the most recently completed garbage
|
||||||
// collection cycle.
|
// collection cycle.
|
||||||
func ReadMemStats(m *MemStats) {
|
func ReadMemStats(m *MemStats) {
|
||||||
|
_ = m.Alloc // nil check test before we switch stacks, see issue 61158
|
||||||
stopTheWorld(stwReadMemStats)
|
stopTheWorld(stwReadMemStats)
|
||||||
|
|
||||||
systemstack(func() {
|
systemstack(func() {
|
||||||
|
|
|
||||||
|
|
@ -1147,6 +1147,7 @@ func showfuncinfo(sf srcFunc, firstFrame bool, calleeID abi.FuncID) bool {
|
||||||
|
|
||||||
// isExportedRuntime reports whether name is an exported runtime function.
|
// isExportedRuntime reports whether name is an exported runtime function.
|
||||||
// It is only for runtime functions, so ASCII A-Z is fine.
|
// It is only for runtime functions, so ASCII A-Z is fine.
|
||||||
|
// TODO: this handles exported functions but not exported methods.
|
||||||
func isExportedRuntime(name string) bool {
|
func isExportedRuntime(name string) bool {
|
||||||
const n = len("runtime.")
|
const n = len("runtime.")
|
||||||
return len(name) > n && name[:n] == "runtime." && 'A' <= name[n] && name[n] <= 'Z'
|
return len(name) > n && name[:n] == "runtime." && 'A' <= name[n] && name[n] <= 'Z'
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue