1
0
mirror of https://github.com/golang/go synced 2024-11-23 19:20:03 -07:00

runtime: use gList for work.sweepWaiters

Change-Id: Ibae474a5c9a3528a042ddf19ddb4a88913a87606
Reviewed-on: https://go-review.googlesource.com/129399
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
This commit is contained in:
Austin Clements 2018-08-10 10:28:44 -04:00
parent 8e8cc9db0f
commit d02169d380

View File

@ -1031,7 +1031,7 @@ var work struct {
// we transition from mark termination to sweep.
sweepWaiters struct {
lock mutex
head guintptr
list gList
}
// cycles is the number of completed GC cycles, where a GC
@ -1146,9 +1146,7 @@ func gcWaitOnMark(n uint32) {
// Wait until sweep termination, mark, and mark
// termination of cycle N complete.
gp := getg()
gp.schedlink = work.sweepWaiters.head
work.sweepWaiters.head.set(gp)
work.sweepWaiters.list.push(getg())
goparkunlock(&work.sweepWaiters.lock, waitReasonWaitForGCCycle, traceEvGoBlock, 1)
}
}
@ -1632,8 +1630,8 @@ func gcMarkTermination(nextTriggerRatio float64) {
// Bump GC cycle count and wake goroutines waiting on sweep.
lock(&work.sweepWaiters.lock)
memstats.numgc++
injectglist(work.sweepWaiters.head.ptr())
work.sweepWaiters.head = 0
injectglist(work.sweepWaiters.list.head.ptr())
work.sweepWaiters.list = gList{}
unlock(&work.sweepWaiters.lock)
// Finish the current heap profiling cycle and start a new