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") }