]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: fix stack growing algorithm
authorgo101 <tapir.liu@gmail.com>
Fri, 2 Jul 2021 08:01:20 +0000 (08:01 +0000)
committerKeith Randall <khr@golang.org>
Fri, 2 Jul 2021 20:11:05 +0000 (20:11 +0000)
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 <khr@golang.org>
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Dmitri Shuralyov <dmitshur@golang.org>

src/runtime/stack.go

index b21c9c95182cb84baa732ff81b81eddab602a4af..6e0d157630b47ad540d8f0e7967748ba4b628da0 100644 (file)
@@ -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
                }
        }