]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: do not inherit labels on system goroutines
authorMichael Pratt <mpratt@google.com>
Tue, 7 Dec 2021 20:59:14 +0000 (15:59 -0500)
committerMichael Pratt <mpratt@google.com>
Wed, 19 Jan 2022 16:33:05 +0000 (16:33 +0000)
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 <austin@google.com>
Trust: Michael Pratt <mpratt@google.com>
Run-TryBot: Michael Pratt <mpratt@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/runtime/proc.go

index 7509f7632f47037ca129c1823fe4d1eaf40d26fe..eee0a25fee78fd105bd9b6890f8aaff63c0c4b47 100644 (file)
@@ -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())