]> Cypherpunks repositories - gostls13.git/commitdiff
runtime/metrics: expand Read documention with caveats
authorMichael Anthony Knyszek <mknyszek@google.com>
Mon, 7 Dec 2020 15:03:51 +0000 (15:03 +0000)
committerMichael Knyszek <mknyszek@google.com>
Thu, 10 Dec 2020 21:08:17 +0000 (21:08 +0000)
This change modifies the documentation of Read with some caveats about
reusing the slice passed in to Read as well as with what concurrent
situations are safe.

Change-Id: I76fd31acc67ae384546a8442dfbf9d16b7445cff
Reviewed-on: https://go-review.googlesource.com/c/go/+/275853
Run-TryBot: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
src/runtime/metrics/sample.go

index 60189cb334b8c1ab7508c0b325d711860aef9984..35534dd70da50f6cf05cc21845f24e781e8dd1ad 100644 (file)
@@ -30,6 +30,16 @@ func runtime_readMetrics(unsafe.Pointer, int, int)
 // The user of this API is encouraged to re-use the same slice between calls for
 // efficiency, but is not required to do so.
 //
+// Note that re-use has some caveats. Notably, Values should not be read or
+// manipulated while a Read with that value is outstanding; that is a data race.
+// This property includes pointer-typed Values (e.g. Float64Histogram) whose
+// underlying storage will be reused by Read when possible. To safely use such
+// values in a concurrent setting, all data must be deep-copied.
+//
+// It is safe to execute multiple Read calls concurrently, but their arguments
+// must share no underlying memory. When in doubt, create a new []Sample from
+// scratch, which is always safe, though may be inefficient.
+//
 // Sample values with names not appearing in All will have their Value populated
 // as KindBad to indicate that the name is unknown.
 func Read(m []Sample) {