mirror of
https://github.com/golang/go
synced 2024-11-23 16:30:06 -07:00
runtime: grow stack more than 2x if the new frame is large
We might as well grow the stack at least as large as we'll need for the frame that is calling morestack. It doesn't help with the lots-of-small-frames case, but it may help a bit with the few-big-frames case. Update #18138 Change-Id: I1f49c97706a70e20b30433cbec99a7901528ea52 Reviewed-on: https://go-review.googlesource.com/c/go/+/225800 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com>
This commit is contained in:
parent
6ed4661807
commit
b1760f3a27
@ -1033,6 +1033,17 @@ func newstack() {
|
||||
// Allocate a bigger segment and move the stack.
|
||||
oldsize := gp.stack.hi - gp.stack.lo
|
||||
newsize := oldsize * 2
|
||||
|
||||
// Make sure we grow at least as much as needed to fit the new frame.
|
||||
// (This is just an optimization - the caller of morestack will
|
||||
// recheck the bounds on return.)
|
||||
if f := findfunc(gp.sched.pc); f.valid() {
|
||||
max := uintptr(funcMaxSPDelta(f))
|
||||
for newsize-oldsize < max+_StackGuard {
|
||||
newsize *= 2
|
||||
}
|
||||
}
|
||||
|
||||
if newsize > maxstacksize {
|
||||
print("runtime: goroutine stack exceeds ", maxstacksize, "-byte limit\n")
|
||||
print("runtime: sp=", hex(sp), " stack=[", hex(gp.stack.lo), ", ", hex(gp.stack.hi), "]\n")
|
||||
|
Loading…
Reference in New Issue
Block a user