1
0
mirror of https://github.com/golang/go synced 2024-09-30 12:08:32 -06:00

runtime: move concurrent mark setup off system stack

For historical reasons we currently do a lot of the concurrent mark
setup on the system stack. In fact, at this point the one and only
thing that needs to happen on the system stack is the start-the-world.

Clean up this code by lifting everything other than the
start-the-world off the system stack.

The diff for this change looks large, but the only code change is to
narrow the systemstack call. Everything else is re-indentation.

Change-Id: I1e03b8afc759fad726f2397b05a17d183c2713ce
Reviewed-on: https://go-review.googlesource.com/16354
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-24 21:19:52 -04:00
parent 1959621584
commit 3842596284

View File

@ -1040,7 +1040,6 @@ func gc(mode gcMode) {
gcController.startCycle()
work.heapGoal = gcController.heapGoal
systemstack(func() {
// Enter concurrent mark phase and enable
// write barriers.
//
@ -1083,11 +1082,10 @@ func gc(mode gcMode) {
atomicstore(&gcBlackenEnabled, 1)
// Concurrent mark.
startTheWorldWithSema()
systemstack(startTheWorldWithSema)
now = nanotime()
work.pauseNS += now - work.pauseStart
gcController.assistStartTime = now
})
work.tMark = now
// Enable background mark workers and wait for