1
0
mirror of https://github.com/golang/go synced 2024-11-25 11:07:59 -07:00

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
This commit is contained in:
Keith Randall 2013-08-19 12:20:50 -07:00
parent 88ee849a8a
commit 6401e0f83f
2 changed files with 5 additions and 4 deletions

View File

@ -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

View File

@ -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