]> Cypherpunks repositories - gostls13.git/commit
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)
committerMichael Knyszek <mknyszek@google.com>
Thu, 1 Feb 2024 21:42:55 +0000 (21:42 +0000)
commitc9d88ea2aa628cae224335c49f256e13adfce337
tree45e8b124809af482813585e6db1386ed72d0250b
parent829f2ce3ba33a09a7975139a0a33d462bb3114db
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>
src/runtime/proc.go