• Austin Clements's avatar
    runtime: don't start idle mark workers when barriers are cleared · 20f276e2
    Austin Clements authored
    Currently, we don't start dedicated or fractional mark workers unless
    the mark 1 or mark 2 barriers have been cleared. One intended
    consequence of this is that no background workers run between the
    forEachP that disposes all gcWork caches and the beginning of mark 2.
    
    However, we (unintentionally) did not apply this restriction to idle
    mark workers. As a result, these can start in the interim between mark
    1 completion and mark 2 starting. This explains why it was necessary
    to reset the root marking jobs using carefully ordered atomic writes
    when setting up mark 2. It also means that, even though we definitely
    enqueue work before starting mark 2, it may be drained by the time we
    reset the mark 2 barrier. If this happens, currently the only thing
    preventing the runtime from deadlocking is that the scheduler itself
    also checks for mark completion and will signal mark 2 completion.
    Were it not for the odd behavior of idle workers, this check in the
    scheduler would not be necessary.
    
    Clean all of this up and prepare to remove this check in the scheduler
    by applying the same restriction to starting idle mark workers.
    
    Change-Id: Ic1b479e1591bd7773dc27b320ca399a215603b5a
    Reviewed-on: https://go-review.googlesource.com/16631Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
    Run-TryBot: Austin Clements <austin@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    20f276e2
Name
Last commit
Last update
api Loading commit data...
doc Loading commit data...
lib/time Loading commit data...
misc Loading commit data...
src Loading commit data...
test Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
AUTHORS Loading commit data...
CONTRIBUTING.md Loading commit data...
CONTRIBUTORS Loading commit data...
LICENSE Loading commit data...
PATENTS Loading commit data...
README.md Loading commit data...
favicon.ico Loading commit data...
robots.txt Loading commit data...