Source File
proflabel.go
Belonging Package
runtime
// Copyright 2017 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.package runtimeimportvar labelSync uintptr//go:linkname runtime_setProfLabel runtime/pprof.runtime_setProfLabelfunc ( unsafe.Pointer) {// Introduce race edge for read-back via profile.// This would more properly use &getg().labels as the sync address,// but we do the read in a signal handler and can't call the race runtime then.//// This uses racereleasemerge rather than just racerelease so// the acquire in profBuf.read synchronizes with *all* prior// setProfLabel operations, not just the most recent one. This// is important because profBuf.read will observe different// labels set by different setProfLabel operations on// different goroutines, so it needs to synchronize with all// of them (this wouldn't be an issue if we could synchronize// on &getg().labels since we would synchronize with each// most-recent labels write separately.)//// racereleasemerge is like a full read-modify-write on// labelSync, rather than just a store-release, so it carries// a dependency on the previous racereleasemerge, which// ultimately carries forward to the acquire in profBuf.read.if raceenabled {racereleasemerge(unsafe.Pointer(&labelSync))}getg().labels =}//go:linkname runtime_getProfLabel runtime/pprof.runtime_getProfLabelfunc () unsafe.Pointer {return getg().labels}
![]() |
The pages are generated with Golds v0.6.7. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |