Commit e9445547 authored by Keith Randall's avatar Keith Randall

runtime: move stack shrinking until after sweepgen is incremented.

Before GC, we flush all the per-P allocation caches.  Doing
stack shrinking mid-GC causes these caches to fill up.  At the
end of gc, the sweepgen is incremented which causes all of the
data in these caches to be in a bad state (cached but not yet
swept).

Move the stack shrinking until after sweepgen is incremented,
so any caching that happens as part of shrinking is done with
already-swept data.

Reenable stack copying.

LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/69620043
parent 0399b971
......@@ -1601,9 +1601,6 @@ addstackroots(G *gp, Workbuf **wbufp)
if((mp = gp->m) != nil && mp->helpgc)
runtime·throw("can't scan gchelper stack");
// Shrink stack if not much of it is being used.
runtime·shrinkstack(gp);
if(gp->syscallstack != (uintptr)nil) {
// Scanning another goroutine that is about to enter or might
// have just exited a system call. It may be executing code such
......@@ -2426,6 +2423,11 @@ gc(struct gc_args *args)
gcstats.npausesweep++;
}
// Shrink a stack if not much of it is being used.
// TODO: do in a parfor
for(i = 0; i < runtime·allglen; i++)
runtime·shrinkstack(runtime·allg[i]);
runtime·MProf_GC();
}
......
......@@ -174,7 +174,6 @@ runtime·schedinit(void)
procresize(procs);
runtime·copystack = runtime·precisestack;
runtime·copystack = false; // TODO: remove
p = runtime·getenv("GOCOPYSTACK");
if(p != nil && !runtime·strcmp(p, (byte*)"0"))
runtime·copystack = false;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment