mirror of
https://github.com/golang/go
synced 2024-11-26 14:56:47 -07:00
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: 57205f91fe
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>
This commit is contained in:
parent
743f03eeb0
commit
287c5e8066
@ -1064,7 +1064,9 @@ func newstack() {
|
|||||||
// recheck the bounds on return.)
|
// recheck the bounds on return.)
|
||||||
if f := findfunc(gp.sched.pc); f.valid() {
|
if f := findfunc(gp.sched.pc); f.valid() {
|
||||||
max := uintptr(funcMaxSPDelta(f))
|
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
|
newsize *= 2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user