From: Keith Randall Date: Wed, 17 Sep 2014 20:25:46 +0000 (-0700) Subject: runtime: free stacks of Gdead goroutines at GC time X-Git-Tag: go1.4beta1~370 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=92eb1e1600c3770d2ec669a8d6b7947cac551305;p=gostls13.git runtime: free stacks of Gdead goroutines at GC time We could probably free the G structures as well, but for the allg list. Leaving that for another day. Fixes #8287 LGTM=rsc R=golang-codereviews, dvyukov, khr, rsc CC=golang-codereviews https://golang.org/cl/145010043 --- diff --git a/src/runtime/stack.c b/src/runtime/stack.c index b38ee31d48..95a5a123d9 100644 --- a/src/runtime/stack.c +++ b/src/runtime/stack.c @@ -806,8 +806,16 @@ runtime·shrinkstack(G *gp) { uintptr used, oldsize, newsize; - if(runtime·readgstatus(gp) == Gdead) + if(runtime·readgstatus(gp) == Gdead) { + if(gp->stack.lo != 0) { + // Free whole stack - it will get reallocated + // if G is used again. + runtime·stackfree(gp->stack); + gp->stack.lo = 0; + gp->stack.hi = 0; + } return; + } if(gp->stack.lo == 0) runtime·throw("missing stack in shrinkstack");