aboutsummaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/mgcmark.go4
-rw-r--r--src/runtime/stack.go10
2 files changed, 3 insertions, 11 deletions
diff --git a/src/runtime/mgcmark.go b/src/runtime/mgcmark.go
index cc4e7d06d3..91f79c44db 100644
--- a/src/runtime/mgcmark.go
+++ b/src/runtime/mgcmark.go
@@ -270,7 +270,9 @@ func markrootFreeGStacks() {
// Free stacks.
q := gQueue{list.head, list.head}
for gp := list.head.ptr(); gp != nil; gp = gp.schedlink.ptr() {
- shrinkstack(gp)
+ stackfree(gp.stack)
+ gp.stack.lo = 0
+ gp.stack.hi = 0
// Manipulate the queue directly since the Gs are
// already all linked the right way.
q.tail.set(gp)
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")
}