From 56ad88b1ffe567d6072e3d25d7b02da18af9f842 Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Tue, 27 Oct 2015 17:48:18 -0400 Subject: [PATCH] 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 Run-TryBot: Austin Clements TryBot-Result: Gobot Gobot --- src/runtime/mgc.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/runtime/mgc.go b/src/runtime/mgc.go index abebe10660..a3326e344e 100644 --- a/src/runtime/mgc.go +++ b/src/runtime/mgc.go @@ -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 -- 2.50.0