1
0
mirror of https://github.com/golang/go synced 2024-11-26 16:46:58 -07:00

runtime: factor our oneNewExtraM trace code

In the interest of further cleaning up the trace.go API, move the trace
logic in oneNewExtraM into its own function.

Change-Id: I5cf478cb8cd0d301ee3b068347ed48ce768b8882
Reviewed-on: https://go-review.googlesource.com/c/go/+/494186
Reviewed-by: Michael Pratt <mpratt@google.com>
Run-TryBot: Michael Knyszek <mknyszek@google.com>
Auto-Submit: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
Michael Anthony Knyszek 2023-05-10 03:14:22 +00:00 committed by Gopher Robot
parent 54031132c8
commit c890d40d0d
2 changed files with 14 additions and 6 deletions

View File

@ -2004,12 +2004,7 @@ func oneNewExtraM() {
gp.racectx = racegostart(abi.FuncPCABIInternal(newextram) + sys.PCQuantum)
}
if traceEnabled() {
// Trigger two trace events for the locked g in the extra m,
// since the next event of the g will be traceEvGoSysExit in exitsyscall,
// while calling from C thread to Go.
traceGoCreate(gp, 0) // no start pc
gp.traceseq++
traceEvent(traceEvGoInSyscall, -1, gp.goid)
traceOneNewExtraM(gp)
}
// put on allg for garbage collector
allgadd(gp)

View File

@ -1713,3 +1713,16 @@ func startPCforTrace(pc uintptr) uintptr {
}
return f.datap.textAddr(*(*uint32)(w))
}
// traceOneNewExtraM registers the fact that a new extra M was created with
// the tracer. This matters if the M (which has an attached G) is used while
// the trace is still active because if it is, we need the fact that it exists
// to show up in the final trace.
func traceOneNewExtraM(gp *g) {
// Trigger two trace events for the locked g in the extra m,
// since the next event of the g will be traceEvGoSysExit in exitsyscall,
// while calling from C thread to Go.
traceGoCreate(gp, 0) // no start pc
gp.traceseq++
traceEvent(traceEvGoInSyscall, -1, gp.goid)
}