Commit 56ad88b1 authored by Austin Clements's avatar Austin Clements

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/16394Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent d841860f
......@@ -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
......
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