• Austin Clements's avatar
    runtime: decentralize mark done and mark termination · c99d7f7f
    Austin Clements authored
    This moves all of the mark 1 to mark 2 transition and mark termination
    to the mark done transition function. This means these transitions are
    now handled on the goroutine that detected mark completion. This also
    means that the GC coordinator and the background completion barriers
    are no longer used and various workarounds to yield to the coordinator
    are no longer necessary. These will be removed in follow-up commits.
    
    One consequence of this is that mark workers now need to be
    preemptible when performing the mark done transition. This allows them
    to stop the world and to perform the final clean-up steps of GC after
    restarting the world. They are only made preemptible while performing
    this transition, so if the worker findRunnableGCWorker would schedule
    isn't available, we didn't want to schedule it anyway.
    
    Fixes #11970.
    
    Change-Id: I9203a2d6287eeff62d589ec02ad9cb1e29ddb837
    Reviewed-on: https://go-review.googlesource.com/16391Reviewed-by: default avatarRick Hudson <rlh@golang.org>
    Run-TryBot: Austin Clements <austin@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    c99d7f7f
proc.go 108 KB