From: Austin Clements Date: Thu, 11 Aug 2022 15:56:11 +0000 (-0400) Subject: runtime: avoid large object stack copy in traceStackTable.dump X-Git-Tag: go1.20rc1~1686 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=0293a1f308b805035e50c9c40af29f72389e4b73;p=gostls13.git runtime: avoid large object stack copy in traceStackTable.dump Following up on the previous CL, this CL removes a unnecessary stack copy of a large object in a range loop. This drops another 64 KiB from (*traceStackTable).dump's stack frame so it is now roughly 80 bytes depending on architecture, which will easily fit on the system stack. For #53979. Change-Id: I16f642f6f1982d0ed0a62371bf2e19379e5870eb Reviewed-on: https://go-review.googlesource.com/c/go/+/422955 Reviewed-by: Michael Knyszek TryBot-Result: Gopher Robot Run-TryBot: Austin Clements --- diff --git a/src/runtime/trace.go b/src/runtime/trace.go index e4498bdfdc..d2cc2acc15 100644 --- a/src/runtime/trace.go +++ b/src/runtime/trace.go @@ -1060,8 +1060,8 @@ func traceFrames(bufp traceBufPtr, pcs []uintptr) ([]traceFrame, traceBufPtr) { // releases all memory and resets state. func (tab *traceStackTable) dump() { bufp := traceFlush(0, 0) - for _, stk := range tab.tab { - stk := stk.ptr() + for i, _ := range tab.tab { + stk := tab.tab[i].ptr() for ; stk != nil; stk = stk.link.ptr() { var frames []traceFrame frames, bufp = traceFrames(bufp, stk.stack())