aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/mprof.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2016-01-06 21:16:01 -0500
committerRuss Cox <rsc@golang.org>2016-01-13 01:46:01 +0000
commitfac8202c3ffdddf5d2b35a2c3620c1eb56018b9b (patch)
treeec9ed1a66478563127a9faa17fe8764705692c6a /src/runtime/mprof.go
parent1e066cad1ba23f4064545355b8737e4762dd6838 (diff)
downloadgo-fac8202c3ffdddf5d2b35a2c3620c1eb56018b9b.tar.gz
go-fac8202c3ffdddf5d2b35a2c3620c1eb56018b9b.zip
runtime: make NumGoroutine and Stack agree not to include system goroutines
[Repeat of CL 18343 with build fixes.] Before, NumGoroutine counted system goroutines and Stack (usually) didn't show them, which was inconsistent and confusing. To resolve which way they should be consistent, it seems like package main import "runtime" func main() { println(runtime.NumGoroutine()) } should print 1 regardless of internal runtime details. Make it so. Fixes #11706. Change-Id: If26749fec06aa0ff84311f7941b88d140552e81d Reviewed-on: https://go-review.googlesource.com/18432 Reviewed-by: Austin Clements <austin@google.com> Run-TryBot: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/runtime/mprof.go')
-rw-r--r--src/runtime/mprof.go5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/runtime/mprof.go b/src/runtime/mprof.go
index 684ab0b055..eb7231aec2 100644
--- a/src/runtime/mprof.go
+++ b/src/runtime/mprof.go
@@ -576,12 +576,17 @@ func Stack(buf []byte, all bool) int {
pc := getcallerpc(unsafe.Pointer(&buf))
systemstack(func() {
g0 := getg()
+ // Force traceback=1 to override GOTRACEBACK setting,
+ // so that Stack's results are consistent.
+ // GOTRACEBACK is only about crash dumps.
+ g0.m.traceback = 1
g0.writebuf = buf[0:0:len(buf)]
goroutineheader(gp)
traceback(pc, sp, 0, gp)
if all {
tracebackothers(gp)
}
+ g0.m.traceback = 0
n = len(g0.writebuf)
g0.writebuf = nil
})