mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: replace system goroutine whitelist with symbol test
Currently isSystemGoroutine has a hard-coded list of known entry points into system goroutines. This list is annoying to maintain. For example, it's missing the ensureSigM goroutine. Replace it with a check that simply looks for any goroutine with runtime function as its entry point, with a few exceptions. This also matches the definition recently added to the trace viewer (CL 81315). Change-Id: Iaed723d4a6e8c2ffb7c0c48fbac1688b00b30f01 Reviewed-on: https://go-review.googlesource.com/81655 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
a8a050819b
commit
44286b17c5
5 changed files with 25 additions and 20 deletions
|
|
@ -576,7 +576,7 @@ func generateTrace(params *traceParams, consumer traceConsumer) error {
|
|||
|
||||
fname := stk[0].Fn
|
||||
info.name = fmt.Sprintf("G%v %s", newG, fname)
|
||||
info.isSystemG = strings.HasPrefix(fname, "runtime.") && fname != "runtime.main"
|
||||
info.isSystemG = isSystemGoroutine(fname)
|
||||
|
||||
ctx.gcount++
|
||||
setGState(ev, newG, gDead, gRunnable)
|
||||
|
|
@ -1125,6 +1125,12 @@ func (ctx *traceContext) buildBranch(parent frameNode, stk []*trace.Frame) int {
|
|||
return ctx.buildBranch(node, stk)
|
||||
}
|
||||
|
||||
func isSystemGoroutine(entryFn string) bool {
|
||||
// This mimics runtime.isSystemGoroutine as closely as
|
||||
// possible.
|
||||
return entryFn != "runtime.main" && strings.HasPrefix(entryFn, "runtime.")
|
||||
}
|
||||
|
||||
// firstTimestamp returns the timestamp of the first event record.
|
||||
func firstTimestamp() int64 {
|
||||
res, _ := parseTrace()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue