mirror of
https://github.com/golang/go
synced 2024-11-21 23:34:42 -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:
parent
88ee849a8a
commit
6401e0f83f
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user