From 3e45eb3ce1f28ccb6e4150b6c2c09ca8568874e6 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Tue, 7 Dec 2021 15:59:14 -0500 Subject: [PATCH] runtime: do not inherit labels on system goroutines GC background mark worker goroutines are created when the first GC is triggered (or next GC after GOMAXPROCS increases). Since the GC can be triggered from a user goroutine, those workers will inherit any pprof labels from the user goroutine. That isn't meaningful, so avoid it by excluding system goroutines from inheriting labels. Fixes #50032 Change-Id: Ib425ae561a3466007ff5deec86b9c51829ab5507 Reviewed-on: https://go-review.googlesource.com/c/go/+/369983 Reviewed-by: Austin Clements Trust: Michael Pratt Run-TryBot: Michael Pratt TryBot-Result: Gopher Robot --- src/runtime/proc.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/runtime/proc.go b/src/runtime/proc.go index 7509f7632f..eee0a25fee 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -4300,11 +4300,13 @@ func newproc1(fn *funcval, callergp *g, callerpc uintptr) *g { newg.gopc = callerpc newg.ancestors = saveAncestors(callergp) newg.startpc = fn.fn - if _g_.m.curg != nil { - newg.labels = _g_.m.curg.labels - } if isSystemGoroutine(newg, false) { atomic.Xadd(&sched.ngsys, +1) + } else { + // Only user goroutines inherit pprof labels. + if _g_.m.curg != nil { + newg.labels = _g_.m.curg.labels + } } // Track initial transition? newg.trackingSeq = uint8(fastrand()) -- 2.48.1