diff options
| author | Austin Clements <austin@google.com> | 2019-04-03 14:47:55 -0400 |
|---|---|---|
| committer | Austin Clements <austin@google.com> | 2019-04-05 20:19:59 +0000 |
| commit | 68d89bb8e05afc2aa050b4c5ad0df4b3af03c45d (patch) | |
| tree | 60f595a8e96eb449910f083c6a5e2aa67dcd4dce /src/runtime/stack.go | |
| parent | ea9859f858b603cbf49f0a930f83c56a716490a4 (diff) | |
| download | go-68d89bb8e05afc2aa050b4c5ad0df4b3af03c45d.tar.xz | |
runtime: separate stack freeing from stack shrinking
Currently, shrinkstack will free the stack if the goroutine is dead.
There are only two places that call shrinkstack: scanstack, which will
never call it if the goroutine is dead; and markrootFreeGStacks, which
only calls it on dead goroutines.
Clean this up by separating stack freeing out of shrinkstack.
Change-Id: I7d7891e620550c32a2220833923a025704986681
Reviewed-on: https://go-review.googlesource.com/c/go/+/170890
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Diffstat (limited to 'src/runtime/stack.go')
| -rw-r--r-- | src/runtime/stack.go | 10 |
1 files changed, 0 insertions, 10 deletions
diff --git a/src/runtime/stack.go b/src/runtime/stack.go index 85902a6b68..d5d09ba7d7 100644 --- a/src/runtime/stack.go +++ b/src/runtime/stack.go @@ -1077,16 +1077,6 @@ func gostartcallfn(gobuf *gobuf, fv *funcval) { // gp must be stopped, but the world need not be. func shrinkstack(gp *g) { gstatus := readgstatus(gp) - if gstatus&^_Gscan == _Gdead { - if gp.stack.lo != 0 { - // Free whole stack - it will get reallocated - // if G is used again. - stackfree(gp.stack) - gp.stack.lo = 0 - gp.stack.hi = 0 - } - return - } if gp.stack.lo == 0 { throw("missing stack in shrinkstack") } |
