From: go101 Date: Fri, 2 Jul 2021 08:01:20 +0000 (+0000) Subject: cmd/compile: fix stack growing algorithm X-Git-Tag: go1.17rc1~14 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=287c5e8066;p=gostls13.git cmd/compile: fix stack growing algorithm The current stack growing implementation looks not right. Specially, the line runtime/stack.go#L1068 never gets executed, which causes many unnecessary copystack calls. This PR is trying to correct the implementation. As I'm not familiar with the code, the fix is just a guess. Change-Id: I0bea1148175fad34f74f19d455c240c94d3cb78b GitHub-Last-Rev: 57205f91fe6f7cecbf0b7aad0d90d2f81270b1e8 GitHub-Pull-Request: golang/go#47010 Reviewed-on: https://go-review.googlesource.com/c/go/+/332229 Reviewed-by: Keith Randall Run-TryBot: Keith Randall TryBot-Result: Go Bot Trust: Dmitri Shuralyov --- diff --git a/src/runtime/stack.go b/src/runtime/stack.go index b21c9c9518..6e0d157630 100644 --- a/src/runtime/stack.go +++ b/src/runtime/stack.go @@ -1064,7 +1064,9 @@ func newstack() { // recheck the bounds on return.) if f := findfunc(gp.sched.pc); f.valid() { max := uintptr(funcMaxSPDelta(f)) - for newsize-gp.sched.sp < max+_StackGuard { + needed := max + _StackGuard + used := gp.stack.hi - gp.sched.sp + for newsize-used < needed { newsize *= 2 } }