diff options
| author | Michael Anthony Knyszek <mknyszek@google.com> | 2024-02-01 05:32:03 +0000 |
|---|---|---|
| committer | Michael Knyszek <mknyszek@google.com> | 2024-02-01 21:42:55 +0000 |
| commit | c9d88ea2aa628cae224335c49f256e13adfce337 (patch) | |
| tree | 45e8b124809af482813585e6db1386ed72d0250b /src/runtime/debug | |
| parent | 829f2ce3ba33a09a7975139a0a33d462bb3114db (diff) | |
| download | go-c9d88ea2aa628cae224335c49f256e13adfce337.tar.xz | |
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>
Diffstat (limited to 'src/runtime/debug')
0 files changed, 0 insertions, 0 deletions
