diff options
author | Russ Cox <rsc@golang.org> | 2015-02-19 16:21:00 -0500 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2015-02-20 17:00:30 +0000 |
commit | 929597b9e956b0231140db741dc437feee95a65a (patch) | |
tree | 3baa4f58f123b3835232241fbd96e51dd59d8920 | |
parent | 2b655c0b928128de154a130876cdff03d973dd90 (diff) | |
download | go-929597b9e956b0231140db741dc437feee95a65a.tar.gz go-929597b9e956b0231140db741dc437feee95a65a.zip |
runtime: unroll gc_m loop
The loop made more sense when gc_m was not its own function.
Change-Id: I71a7f21d777e69c1924e3b534c507476daa4dfdd
Reviewed-on: https://go-review.googlesource.com/5332
Reviewed-by: Austin Clements <austin@google.com>
-rw-r--r-- | src/runtime/mgc.go | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/src/runtime/mgc.go b/src/runtime/mgc.go index 079856ed70..4adc0f4fbe 100644 --- a/src/runtime/mgc.go +++ b/src/runtime/mgc.go @@ -362,20 +362,9 @@ func gc(mode int) { // the root set down a bit (g0 stacks are not scanned, and // we don't need to scan gc's internal state). We also // need to switch to g0 so we can shrink the stack. - n := 1 - if debug.gctrace > 1 { - n = 2 - } - for i := 0; i < n; i++ { - if i > 0 { - // refresh start time if doing a second GC - startTime = nanotime() - } - // switch to g0, call gc, then switch back - systemstack(func() { - gc_m(startTime, mode == gcForceBlockMode) - }) - } + systemstack(func() { + gc_m(startTime, mode == gcForceBlockMode) + }) systemstack(func() { // Called from malloc.go using systemstack. @@ -397,6 +386,13 @@ func gc(mode int) { gc_m(startTime, mode == gcForceBlockMode) // turns off checkmarkphase + calls clearcheckmarkbits }) + if debug.gctrace > 1 { + startTime = nanotime() + systemstack(func() { + gc_m(startTime, mode == gcForceBlockMode) + }) + } + if trace.enabled { traceGCDone() traceGoStart() |