]> Cypherpunks.ru repositories - gostls13.git/commit
[release-branch.go1.22] runtime: traceAcquire and traceRelease across all P steals
authorMichael Anthony Knyszek <mknyszek@google.com>
Thu, 1 Feb 2024 05:32:03 +0000 (05:32 +0000)
committerGopher Robot <gobot@golang.org>
Thu, 1 Feb 2024 22:54:02 +0000 (22:54 +0000)
commit58a35fe55beca3747cc410c315d3354e4a3876d0
tree07f7af90893e940b307cded51a6561e7b1d29e0a
parent4c5517913ca46324634cd222b68bb78bf993307d
[release-branch.go1.22] runtime: traceAcquire and traceRelease across all P steals

Currently there are a few places where a P can get stolen where the
runtime doesn't traceAcquire and traceRelease across the steal itself.
What can happen then is the following scenario:
- Thread 1 enters a syscall and writes an event about it.
- Thread 2 steals Thread 1's P.
- Thread 1 exits the syscall and writes one or more events about it.
- Tracing ends (trace.gen is set to 0).
- Thread 2 checks to see if it should write an event for the P it just
  stole, sees that tracing is disabled, and doesn't.

This results in broken traces, because there's a missing ProcSteal
event. The parser always waits for a ProcSteal to advance a
GoSyscallEndBlocked event, and in this case, it never comes.

Fixes #65181.

Change-Id: I437629499bb7669bf7fe2fc6fc4f64c53002916b
Reviewed-on: https://go-review.googlesource.com/c/go/+/560235
Reviewed-by: Michael Pratt <mpratt@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
(cherry picked from commit c9d88ea2aa628cae224335c49f256e13adfce337)
Reviewed-on: https://go-review.googlesource.com/c/go/+/559958
Auto-Submit: Michael Knyszek <mknyszek@google.com>
src/runtime/proc.go