Commit 6401e0f8 authored by Keith Randall's avatar Keith Randall

runtime: don't run finalizers if we're still on the g0 stack.

R=golang-dev, rsc, dvyukov, khr
CC=golang-dev
https://golang.org/cl/11386044
parent 88ee849a
......@@ -2098,7 +2098,7 @@ runtime·gc(int32 force)
runtime·starttheworld();
m->locks--;
// now that gc is done and we're back on g stack, kick off finalizer thread if needed
// now that gc is done, kick off finalizer thread if needed
if(finq != nil) {
runtime·lock(&finlock);
// kick off or wake up goroutine to run queued finalizers
......@@ -2109,11 +2109,12 @@ runtime·gc(int32 force)
runtime·ready(fing);
}
runtime·unlock(&finlock);
// give the queued finalizers, if any, a chance to run
runtime·gosched();
}
if(g->preempt) // restore the preemption request in case we've cleared it in newstack
g->stackguard0 = StackPreempt;
// give the queued finalizers, if any, a chance to run
if(g != m->g0)
runtime·gosched();
}
static void
......
......@@ -105,7 +105,7 @@ runtime·stackalloc(uint32 n)
m->stackinuse++;
return v;
}
return runtime·mallocgc(n, 0, FlagNoProfiling|FlagNoGC|FlagNoZero|FlagNoInvokeGC);
return runtime·mallocgc(n, 0, FlagNoProfiling|FlagNoGC|FlagNoZero);
}
void
......
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