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:
parent
d841860f43
commit
56ad88b1ff
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user