for i, label := range gcMarkWorkerModeStrings[:] {
trace.markWorkerLabels[i], bufp = traceString(bufp, pid, label)
}
- traceReleaseBuffer(pid)
+ traceReleaseBuffer(mp, pid)
unlock(&trace.bufLock)
//
// Note trace_userTaskCreate runs the same check.
if !trace.enabled && !mp.startingtrace {
- traceReleaseBuffer(pid)
+ traceReleaseBuffer(mp, pid)
return
}
}
}
traceEventLocked(0, mp, pid, bufp, ev, 0, skip, args...)
- traceReleaseBuffer(pid)
+ traceReleaseBuffer(mp, pid)
}
// traceEventLocked writes a single event of type ev to the trace buffer bufp,
}
// traceReleaseBuffer releases a buffer previously acquired with traceAcquireBuffer.
-func traceReleaseBuffer(pid int32) {
+func traceReleaseBuffer(mp *m, pid int32) {
if pid == traceGlobProc {
unlock(&trace.bufLock)
}
- releasem(getg().m)
+ releasem(mp)
}
// lockRankMayTraceFlush records the lock ranking effects of a
// Same as in traceEvent.
mp, pid, bufp := traceAcquireBuffer()
if !trace.enabled && !mp.startingtrace {
- traceReleaseBuffer(pid)
+ traceReleaseBuffer(mp, pid)
return
}
typeStringID, bufp := traceString(bufp, pid, taskType)
traceEventLocked(0, mp, pid, bufp, traceEvUserTaskCreate, 0, 3, id, parentID, typeStringID)
- traceReleaseBuffer(pid)
+ traceReleaseBuffer(mp, pid)
}
//go:linkname trace_userTaskEnd runtime/trace.userTaskEnd
mp, pid, bufp := traceAcquireBuffer()
if !trace.enabled && !mp.startingtrace {
- traceReleaseBuffer(pid)
+ traceReleaseBuffer(mp, pid)
return
}
nameStringID, bufp := traceString(bufp, pid, name)
traceEventLocked(0, mp, pid, bufp, traceEvUserRegion, 0, 3, id, mode, nameStringID)
- traceReleaseBuffer(pid)
+ traceReleaseBuffer(mp, pid)
}
//go:linkname trace_userLog runtime/trace.userLog
mp, pid, bufp := traceAcquireBuffer()
if !trace.enabled && !mp.startingtrace {
- traceReleaseBuffer(pid)
+ traceReleaseBuffer(mp, pid)
return
}
buf.varint(uint64(slen))
buf.pos += copy(buf.arr[buf.pos:], message[:slen])
- traceReleaseBuffer(pid)
+ traceReleaseBuffer(mp, pid)
}
// the start PC of a goroutine for tracing purposes. If pc is a wrapper,