1
0
mirror of https://github.com/golang/go synced 2024-11-18 01:04:48 -07:00

runtime: free stack spans outside STW

We couldn't do this before this point because it must be done before
the next GC cycle starts. Hence, if it delayed the start of the next
cycle, that would widen the window between reaching the heap trigger
of the next cycle and starting the next GC cycle, during which the
mutator could over-allocate. With the decentralized GC, any mutators
that reach the heap trigger will block on the GC starting, so it's
safe to widen the time between starting the world and being able to
start the next GC cycle.

Fixes #11465.

Change-Id: Ic7ea7e9eba5b66fc050299f843a9c9001ad814aa
Reviewed-on: https://go-review.googlesource.com/16394
Reviewed-by: Rick Hudson <rlh@golang.org>
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
Austin Clements 2015-10-27 17:48:18 -04:00
parent d841860f43
commit 56ad88b1ff

View File

@ -1229,6 +1229,10 @@ func gcMarkTermination() {
memstats.numgc++
systemstack(startTheWorldWithSema)
// Free stack spans. This must be done between GC cycles.
systemstack(freeStackSpans)
semrelease(&worldsema)
releasem(mp)
@ -1540,12 +1544,6 @@ func gcMark(start_time int64) {
traceGCScanDone()
}
// TODO(austin): This doesn't have to be done during STW, as
// long as we block the next GC cycle until this is done. Move
// it after we start the world, but before dropping worldsema.
// (See issue #11465.)
freeStackSpans()
cachestats()
// Compute the reachable heap size at the beginning of the