]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: avoid large object stack copy in traceStackTable.dump
authorAustin Clements <austin@google.com>
Thu, 11 Aug 2022 15:56:11 +0000 (11:56 -0400)
committerAustin Clements <austin@google.com>
Thu, 11 Aug 2022 20:16:31 +0000 (20:16 +0000)
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 <mknyszek@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Austin Clements <austin@google.com>

src/runtime/trace.go

index e4498bdfdce569dc417083d5190f40c90eea2dfc..d2cc2acc15541586d89d24a7438bd046c87e8964 100644 (file)
@@ -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())