Currently most uses of gcWork use the per-P gcWork, but there are two
places that still use a stack-based gcWork. Simplify things by making
these instead use the per-P gcWork.
Change-Id: I712d012cce9dd5757c8541824e9641ac1c2a329c
Reviewed-on: https://go-review.googlesource.com/19636
Reviewed-by: Rick Hudson <rlh@golang.org>
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
gchelperstart()
- var gcw gcWork
- gcDrain(&gcw, gcDrainBlock)
+ gcw := &getg().m.p.ptr().gcw
+ gcDrain(gcw, gcDrainBlock)
gcw.dispose()
gcMarkRootCheck()
// Parallel mark over GC roots and heap
if gcphase == _GCmarktermination {
- var gcw gcWork
- gcDrain(&gcw, gcDrainBlock) // blocks in getfull
+ gcw := &_g_.m.p.ptr().gcw
+ gcDrain(gcw, gcDrainBlock) // blocks in getfull
gcw.dispose()
}
//
// A gcWork can be used on the stack as follows:
//
-// var gcw gcWork
-// disable preemption
-// .. call gcw.put() to produce and gcw.get() to consume ..
-// gcw.dispose()
-// enable preemption
-//
-// Or from the per-P gcWork cache:
-//
// (preemption must be disabled)
// gcw := &getg().m.p.ptr().gcw
// .. call gcw.put() to produce and gcw.get() to consume ..