]> Cypherpunks repositories - gostls13.git/commit
runtime: don't let readTrace spin on trace.shutdown
authorMichael Anthony Knyszek <mknyszek@google.com>
Tue, 10 Jun 2025 21:44:56 +0000 (21:44 +0000)
committerMichael Knyszek <mknyszek@google.com>
Mon, 16 Jun 2025 22:16:29 +0000 (15:16 -0700)
commit816199e421f743324e9c1c82bda22d1d0f53845c
tree53b71eaf92f1c1313634cd85b35a1d3838adc123
parentea00461b17c7579d1c9aff2398953b61747ce642
runtime: don't let readTrace spin on trace.shutdown

Issue #74045 describes a scenario in which gopark is inlined into
readTrace, such that there are no preemption points. This is only a
problem because readTrace spins if trace.shutdown is set, through
traceReaderAvailable. However, trace.shutdown is almost certainly
overkill for traceReaderAvailable. The first condition, checking whether
the reader gen and the flushed gen match, should be sufficient to ensure
the reader wakes up and finishes flushing all buffers. The first
condition is also safe because it guarantees progress. In the case of
shutdown, all the trace work that will be flushed has been flushed, and
so the trace reader will exit into a regular goroutine context when
it's finished. If not shutting down, then the trace reader will release
doneSema, increase readerGen, and then the gopark unlockf will let it
block until new work actually comes in.

Fixes #74045.

Change-Id: Id9b15c277cb731618488771bd484577341b68675
Reviewed-on: https://go-review.googlesource.com/c/go/+/680738
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Nick Ripley <nick.ripley@datadoghq.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
Auto-Submit: Michael Knyszek <mknyszek@google.com>
src/runtime/trace.go