From: Michael Pratt Date: Tue, 7 Dec 2021 20:59:14 +0000 (-0500) Subject: runtime: do not inherit labels on system goroutines X-Git-Tag: go1.18beta2~71 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=3e45eb3ce1f28ccb6e4150b6c2c09ca8568874e6;p=gostls13.git 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 --- 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())